Matlab Vectorization:如何删除for循环?

时间:2012-08-22 11:55:24

标签: matlab vectorization

我有以下矩阵:

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循环的情况下完成吗?

2 个答案:

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