我正在寻找一种快速而灵活的方法来在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
我只是想知道这是否可以用更简单(更优雅)的方式来避免循环。
答案 0 :(得分:6)
您可以将A
从3D
重新塑造为2D
,使用very efficient matrix-multiplication
,它会为您提供1D
数组,最后重塑为{{ 1}}用于最终输出,如此 -
2D
答案 1 :(得分:4)