alpha
是 M×1
矢量,和R
是一个大数组,大小为 n×n×M
.就我而言,n
和 M
大约是 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)
有人可以告诉我是否有更好、更有效的方法吗?
最佳答案
您可以使用单例扩展,或者使用 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));
关于arrays - 一维向量与三维数组相乘求和的向量化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46009419/