我知道在Matlab中你可以使用“漂亮”的矢量操作,如A*B
或A.*B
如果你有
A=[2, 2];
B=[3, 1];
这是逻辑,你不能使用A*B
。您可以使用A.*B
A[1]*B[1], A[2]*B[2]
,结果为[6, 2]
。
在我写的许多“剧本”中,我经常需要使用某些东西,结果是:
[6, 6;
2, 2]
所以基本上我需要使用forcycle(类似于:):
C=zeros(2,2);
for i=1:size(A,1)
C(i,:)=A*B(i);
end
我想问一下,如果没有forcycles,如何(如果可能的话)重写这个?可能吗? 这2个元素的2个向量可能不利于理解我需要的东西。 另一个例子:
A=[1,2,3,4,5]
B=[2,4]
结果:
[2,4,6,8,10;
4,8,12,16,20]
简而言之如下:
C(1:结束< ====通过一个元素运行,:)= A * B(1:结束< =====由一个元素运行)
- >取整个向量A并将其乘以B中的FIRST元素并将其保存在矩阵中的第一行,其中包含A列和B行。
- >取整个矢量A并将其乘以B中的SECOND元素并将其保存在矩阵中的第二行,其中包含A列和B行..
- >取整个向量A并将其乘以B中的THIRD元素并将其保存在矩阵中的第三行,其中包含A列和B行。
- > ...
- >取整个向量A并将其乘以B中的LAST元素并将其保存在matric的最后一行,其中包含A列和B行..
答案 0 :(得分:4)
您可以将bsxfun
用于此目的
P = bsxfun(@times,A,B')
这给出了
A = 1 2 3 4 5
B = 2 4
P = 2 4 6 8 10
4 8 12 16 20
答案 1 :(得分:2)
另一种解决方案是使用矩阵乘法:
[ones(size(B))'*A].*[B'*ones(size(A))]