arrays - 一维向量与三维数组相乘求和的向量化

标签 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)

有人可以告诉我是否有更好、更有效的方法吗?

最佳答案

您可以使用单例扩展,或者使用 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/

相关文章:

matlab - Matlab 中时间序列之间的相似性搜索。可能的 ?我在 matlab 中找不到 R 树实现

arrays - 比较 2 个数组并列出差异 - Swift

javascript - 额外的元素被添加到数组中

matlab - 在 Matlab/Octave 矩阵中使用范围

python - NumPy - 使用权重对 2D 数组列进行向量化 bincount

c - 对于简单的二进制减法,SSE 的最大理论加速是多少?

matlab - 向量化二元运算的串联

java - 更新 TextView 中的数组

javascript - 阵列上的forEach在ie11中不起作用

matlab - OpenCV函数类似于matlab的 "find"