Matlab中矢量/数组乘法的快速方法

时间:2016-04-20 08:37:50

标签: matlab multidimensional-array vectorization matrix-multiplication

我正在寻找一种快速而灵活的方法来在Matlab中计算以下内容而不使用循环:

c = 1:5;
A = reshape(1:5^3,5,5,5);
res= c(1)*A(:,:,1)+...+c(5)*A(:,:,5) 

我认为,使用

sum(A,3) 
只要我能够沿第三维执行乘法,

可能是一个很好的方法。一个解决方案(但有循环)将是:

val = zeros(length(c),length(c))
for i = 1:length(c)
    val = val+c(i)*A(:,:,i)
end

我只是想知道这是否可以用更简单(更优雅)的方式来避免循环。

2 个答案:

答案 0 :(得分:6)

您可以将A3D重新塑造为2D,使用very efficient matrix-multiplication,它会为您提供1D数组,最后重塑为{{ 1}}用于最终输出,如此 -

2D

答案 1 :(得分:4)

是的,对于bsxfunpermute来说,这是一个完美的工作:

res = sum(bsxfun(@times,A,permute(c,[3,1,2])),3)

您使用cpermute(c,[3,1,2])发送到第三维。然后,通过调用bsxfunA中的每个矩阵乘以相应的(置换的)c。最后,您可以在第三维上执行sum

相关问题