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

muf*_*974 3 matlab vectorization multidimensional-array matrix-multiplication

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

c = 1:5;
A = reshape(1:5^3,5,5,5);
res= c(1)*A(:,:,1)+...+c(5)*A(:,:,5) 
Run Code Online (Sandbox Code Playgroud)

我认为,与之合作

sum(A,3) 
Run Code Online (Sandbox Code Playgroud)

只要我能够沿第三维执行乘法,这可能是一个很好的方法.一个解决方案(但有循环)将是:

val = zeros(length(c),length(c))
for i = 1:length(c)
    val = val+c(i)*A(:,:,i)
end
Run Code Online (Sandbox Code Playgroud)

我只是想知道这是否可以以更简单(更优雅)的方式完成,避免循环.

Div*_*kar 6

您可以重塑A3D2D,使用very efficient matrix-multiplication,它会给你一个1D数组,并最终重塑回2D的最终输出,像这样-

res = reshape(reshape(A,[],size(A,3))*c(:),size(A,1),[])
Run Code Online (Sandbox Code Playgroud)