【问题标题】:Vectorization of summation of multipication of a 1D vector and a 3D array1D 向量和 3D 数组相乘之和的向量化
【发布时间】:2017-09-02 00:29:01
【问题描述】:

alpha 是一个M×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)

如果有更好更有效的方法可以让我知道吗?

【问题讨论】:

    标签: arrays matlab vectorization


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2016-11-21
      • 2018-05-07
      • 1970-01-01
      • 1970-01-01
      • 2019-09-11
      • 1970-01-01
      • 1970-01-01
      • 2017-11-05
      • 1970-01-01
      相关资源
      最近更新 更多