给出一个向量和矩阵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
但由于矢量太长,我无法手动完成。
答案 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