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)
我只是想知道这是否可以以更简单(更优雅)的方式完成,避免循环.
您可以重塑A
从3D
到2D
,使用very efficient matrix-multiplication
,它会给你一个1D
数组,并最终重塑回2D
的最终输出,像这样-
res = reshape(reshape(A,[],size(A,3))*c(:),size(A,1),[])
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
131 次 |
最近记录: |