Matlab矢量运算(矢量+矢量(按元素))

时间:2013-10-04 22:26:46

标签: matlab vector operation

我知道在Matlab中你可以使用“漂亮”的矢量操作,如A*BA.*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行..

2 个答案:

答案 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))]