La moltiplicazione Matrix-Vector di una matrice (M x N) con un vettore (N x 1) provocherà un vettore (M x 1). In breve a*A(MxN)*X(Nx1) + b*Y(Mx1) -> Y(Mx1)
. Naturalmente è possibile utilizzare INCX
e INCY
quando il vettore è incluso in una matrice.
Per definire una moltiplicazione della matrice vettoriale, è necessario trasporre il vettore. vale a dire . Fondamentalmente non hai un vettore ma una matrice a riga singola.
A partire da questo punto ci sono due possibilità.
usare sia di livello 3 "GEMM"
?gemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
utilizzando
?gemm('N', 'N', 1, N, M, a, X, 1, A, M, b, Y, 1)
O fare un po 'più matematica. Considerando che (X*A)^T = A^T * X^T
la matrice di righe X
viene convertita in vettore X^T (MX1). Anche la trasposizione Y
è il vettore Y^T(Nx1)
. Naturalmente la memoria sia X
sia X^T
sono memorizzati allo stesso modo, in sequenza. Ciò significa che è possibile utilizzare nuovamente GEMV
utilizzando matrice trasposta A
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)
trasposizione (x). trasporre (A) = A.x – talonmies