我有以下矩阵: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个元素。
它可以做到没有循环?
我有以下矩阵: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个元素。
它可以做到没有循环?
编辑作为@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
是不是这样乘以A乘以X? – groovingandi
@grooveingandi对不起,我错误地问了我的问题更简单的版本:)。我现在编辑了我的问题。 –
您能否回滚您的编辑并提出一个新问题?这样,@ HighPerformanceMark聪明的答案仍然有意义,我们可以用新的答案解决新的问题。 – Jonas