2

我知道在 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:end <==== GO BY ONE ELEMENT,:)=A*B(1:end <===== GO BY ONE ELEMENT)
--> 取整个向量 A 并相乘它由 B 中的第一个元素保存并保存在矩阵中的第一行有 A 列和 B 行..
--> 取整个向量 A 并将其乘以 B 中的第二个元素并将其保存在矩阵中的第二行有 A 列和 B 行 ..
--> 取整个向量 A 并将其乘以 B 中的第三个元素,并将其保存在矩阵的第三行中,其中包含 A 列和 B 行..
--> ...
--> 取整个向量 A并将其乘以 B 中的最后一个元素,并将其保存在矩阵中的最后一行,其中包含 A 列和 B 行。

4

2 回答 2

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
于 2013-10-04T22:32:57.853 回答
2

另一种解决方案是使用矩阵乘法:

[ones(size(B))'*A].*[B'*ones(size(A))]
于 2013-10-04T22:52:41.060 回答