例如,我有两个矩阵 A 和 B
A = [ 1 2 3; 5 4 3; ...] 且 B = [ 1; 2; 3; 4; 5; 6](行矩阵)
我想要这个
A*B = [1*1 2*1 3*1; 5*2 4*2 3*2; ...] 没有循环。可能吗?
最佳答案
从数学上来说,两个矩阵只有在维度一致的情况下才能相乘;如果矩阵A
是m*n
并且矩阵B
是n*k
那么你可以形成乘积A*B
其尺寸为 m*k
。因此,从数学角度来看,矩阵 A
(即 m*3
)不能后乘以 B
(即 6) *1
。如果您的矩阵 A
实际上是 6*3
,那么您可以形成尺寸为 1* 的乘积
.请注意此处使用转置运算符 B'*A
3.'
将 B
从 6*1
转置为 1*6
。
Matlab 的矩阵乘法(使用*
运算符)符合矩阵一致的数学要求。 Matlab 还提供了另一个矩阵乘法运算符 .*
,它执行逐个元素的乘法,即它通过以下方式形成结果的每个元素 (i,j)
乘以A(i,j)*B(i,j)
。我看到 @Thor 已经给了你一种方法来做到这一点。
如果您想要做的是将 A
行 i
中的每个元素乘以 行
另一种方法是i
中的标量B
A.*(repmat(B,1,size(A,2)))
或者,您可以使用更高效,但可能稍微不太直观的方法,
bsxfun(@times, A,B);
关于Matlab矩阵行对行乘法两个矩阵维度不一致,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12178211/