一维矢量和三维阵列的乘法求和的矢量化

时间:2017-09-02 00:29:02

标签: arrays matlab vectorization

alphaM×1向量,R是一个大小为n×n×M的大数组。就我而言,nM约为3000.如何在MATLAB中对以下求和进行矢量化?

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

我想到的一种方法是使alpha具有相同的大小并进行元素操作,最后在第3维中进行求和

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

如果有更好更有效的方法,有人可以告诉我吗?

1 个答案:

答案 0 :(得分: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));