2012-08-22 79 views
0

我有以下矩阵:Matlab矢量化:如何删除for循环?

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个元素。
它可以做到没有循环?

+0

是不是这样乘以A乘以X? – groovingandi

+0

@grooveingandi对不起,我错误地问了我的问题更简单的版本:)。我现在编辑了我的问题。 –

+0

您能否回滚您的编辑并提出一个新问题?这样,@ HighPerformanceMark聪明的答案仍然有意义,我们可以用新的答案解决新的问题。 – Jonas

回答

6

也许这样的事情?

B = A.*sum(X) 
+0

是的,考虑这个问题会有帮助! :D +1为你! – Jonas

1

编辑作为@HighPerformanceMark指出,你可以简单地乘以的X的总和,这显然是preferrable。下面是一个解决方案,可以完成您想要做的步骤,这可能会使我的解决方案对问题的非线性变体有用。

您可以将X转换为1×1×3的数组,并将其与A相乘得到一个3×3×3的数组,然后可以沿第三维求和:

X = permute(X,[1,3,2]); %# make X 1*1*3 

B = sum(bsxfun(@times, A, X), 3); %# multiply and sum