2017-09-02 168 views
3

alphaM×1矢量,並且R是尺寸爲n×n×M的大陣列。在我的情況下,nM約爲3000.如何在MATLAB中矢量化以下求和?我想到的1D矢量和3D陣列的乘法求和的矢量化

alpha(1)*R(:,:,1) + alpha(2)*R(:,:,2) + ... + alpha(M)*R(:,:,M) 

的一種方法是使阿爾法相同的大小,做一個元素智能操作,最後做一個總結的第三維

sum(reshape(kron(alpha, ones(n*n,1)), [n,n,M]).*R,3) 

可能有人請讓我知道,如果有是這樣做的更好和有效的方式?

回答

2

您可以使用單擴展,無論是與bsxfun

result = sum(bsxfun(@times, R, reshape(alpha, 1, 1, [])), 3); 

implicit

result = sum(R.*reshape(alpha, 1, 1, []), 3); 

或者,你可以使用矩陣乘法:

result = reshape(reshape(R, [], size(R,3))*alpha, size(R,1), size(R,2));