我有以下矩阵:
X=1 2 3
A=1 2 3
4 5 6
7 8 9
我想做
for each (i,j) in A
B(i,j) = sum(A(i,j)*x)
即。 A的每个元素乘以向量X,并且我们对该向量的所有3个元素求和 它可以在没有for循环的情况下完成吗?
答案 0 :(得分:6)
或许这样的事情?
B = A.*sum(X)
答案 1 :(得分:1)
编辑当@HighPerformanceMark指出时,您可以简单地乘以X
的总和,这显然是可取的。下面的解决方案完全按照您要执行的步骤进行,这可能使我的解决方案对问题的非线性变体有用。
您可以将X
转换为1 x 1乘3的数组,并将其乘以A得到一个3 x 3 x 3的数组,然后您可以将其相加第三维:
X = permute(X,[1,3,2]); %# make X 1*1*3
B = sum( bsxfun(@times, A, X), 3); %# multiply and sum