如何将A的每个元素作为标量乘以B

时间:2016-11-11 01:59:24

标签: matlab octave

给出一个向量和矩阵A和B,如何将A的每个元素作为标量乘以B,然后将每个新矩阵相加,而不使用for循环。

我的意思是:

A = [1;2;3]
B = [1 2;3 4 ;5 6] 

C = (A(1) * B) + (A(2) * B) + (A(3) * B)

ans =

 6    12
18    24
30    36

C = sum(C)
C =

54    72

但由于矢量太长,我无法手动完成。

2 个答案:

答案 0 :(得分:3)

您可以使用以下命令:

(>>=)

<强>解释

sum(reshape(sum(B(:)*A.',2),size(B)))

展开B(:)*A' 并将其中的每个元素与B的每个元素相乘。

A

总结A&#39; A&#39;维度(行)。

sum(B(:)*A.',2)

重塑以回到reshape(sum(B(:)*A.',2),size(B)) 的原始尺寸。

B

根据需要对列进行求和。

修改

来自@verbatros的建议,当sum(reshape(sum(B(:)*A.',2),size(B))) 也是行向量时也是如此:

A

答案 1 :(得分:1)

非常简单:

A = [1;2;3]
B = [1 2;3 4 ;5 6]

C = sum (A(:)) .* sum (B)
C =

   54   72