BLAS定义了GEMV(矩阵 - 向量乘法)2级操作。如何使用BLAS库执行向量矩阵乘法?
这可能很明显,但我没有看到如何使用BLAS操作进行此乘法。我原本期望一个GEVM操作。
答案 0 :(得分:7)
(M×N)矩阵与(N×1)向量的矩阵 - 向量乘法将得到(M×1)向量。简而言之a*A(MxN)*X(Nx1) + b*Y(Mx1) -> Y(Mx1)
。当您的向量包含在矩阵中时,您可以使用INCX
和INCY
。
为了定义Vector-Matrix乘法,应该转置Vector。即a*X(1xM)*A(MxN) + b*Y(1xN) -> Y(1xN)
。基本上你没有矢量而是单行矩阵。
从这一点开始,有两种可能性。
使用level-3“GEMM”
?gemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
使用
?gemm('N', 'N', 1, N, M, a, X, 1, A, M, b, Y, 1)
或者做一些更多的数学。考虑(X*A)^T = A^T * X^T
行矩阵X
被转换为向量X ^ T(MX1)。另外Y
转置是向量Y^T(Nx1)
。当然,内存方式X
和X^T
都以相同的方式按顺序存储。这意味着您可以使用转置矩阵GEMV
A
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)