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

Matrix 如何使用BLAS执行向量矩阵乘法?,matrix,matrix-multiplication,blas,Matrix,Matrix Multiplication,Blas,BLAS定义了GEMV(矩阵向量乘法)2级操作。如何使用BLAS库执行向量矩阵乘法 这可能很明显,但我不知道如何使用BLAS运算进行乘法。我本以为会有GEVM操作 一个(M x N)矩阵与一个(N x 1)向量的矩阵向量相乘将得到一个(M x 1)向量。简而言之a*a(MxN)*X(Nx1)+b*Y(Mx1)->Y(Mx1)。当然,当向量包含在矩阵中时,可以使用INCX和INCY 为了定义向量矩阵乘法,应该对向量进行转置。i、 e.a*X(1xM)*a(MxN)+b*Y(1xN)->Y(1xN)

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


这可能很明显,但我不知道如何使用BLAS运算进行乘法。我本以为会有GEVM操作

一个(M x N)矩阵与一个(N x 1)向量的矩阵向量相乘将得到一个(M x 1)向量。简而言之
a*a(MxN)*X(Nx1)+b*Y(Mx1)->Y(Mx1)
。当然,当向量包含在矩阵中时,可以使用
INCX
INCY

为了定义向量矩阵乘法,应该对向量进行转置。i、 e.
a*X(1xM)*a(MxN)+b*Y(1xN)->Y(1xN)
。基本上你没有向量,只有一行矩阵

从这一点出发,有两种可能性

要么使用3级“GEMM”

使用

或者多做点数学。考虑到
(X*A)^T=A^T*X^T
,行矩阵
X
被转换为向量X^T(MX1)。同样
Y
转置是向量
Y^T(Nx1)
。当然,内存方面的
X
X^T
都是以相同的方式顺序存储的。这意味着您可以再次使用转置矩阵
A

?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)

转置(x)。转置(A)=A.x感谢解释和精确的例子,它工作得很好:)我两个都试过了。但是
?gemm
的速度大约是
?gemv
的2~3倍。难道
?gemv
不应该总是比
?gemm
快吗?
?gemm('N', 'N', 1, N, M, a, X, 1, A, M, b, Y, 1)
?gemv('T', M, N, a, A, M, X, 1, b, Y, 1)