如何使用BLAS执行向量矩阵乘法?

Bap*_*cht 6 matrix blas matrix-multiplication

BLAS定义了GEMV(矩阵 - 向量乘法)2级操作.如何使用BLAS库执行向量矩阵乘法?

这可能是显而易见的,但我没有看到如何使用BLAS操作进行此乘法.我原本期望一个GEVM操作.

zti*_*tik 7

(M×N)矩阵与(N×1)向量的矩阵 - 向量乘法将得到(M×1)向量.简而言之a*A(MxN)*X(Nx1) + b*Y(Mx1) -> Y(Mx1).当然,您可以使用INCXINCY当矢量包含在矩阵中时.

为了定义Vector-Matrix乘法,Vector应该被转置.即a*X(1xM)*A(MxN) + b*Y(1xN) -> Y(1xN).基本上你没有矢量而是单行矩阵.

从这一点开始,有两种可能性.

要么使用3级"GEMM"

?gemm(transa, transb, m, n, k, alpha, a, lda, b, ldb, beta, c, ldc)
Run Code Online (Sandbox Code Playgroud)

运用

?gemm('N', 'N', 1, N, M, a, X, 1, A, M, b, Y, 1)
Run Code Online (Sandbox Code Playgroud)

或者做一些更多的数学.考虑到(X*A)^T = A^T * X^T行矩阵X被转换为向量X ^ T(MX1).也Y转置是矢量Y^T(Nx1).当然,内存既明智XX^T有店用同样的方式,顺序.这意味着您可以使用GEMV转置矩阵再次使用A

?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)
Run Code Online (Sandbox Code Playgroud)