5

有没有办法对以下内容进行矢量化:

    for i = 1:6
        te = k(:,:,:,i).*(c(i));
    end

我正在尝试将 4D 矩阵 k 乘以向量 c,方法是将其分解为独立的(3D 矩阵 * 标量)操作。在这个函数文件的一个while循环中,我已经有另外两个不可避免的for循环,并且正在尽我所能避免循环。

对此的任何见解将不胜感激!

-SC

4

2 回答 2

5

您可以使用MTIMESX - 一种由 James Tursa 提供的具有多维支持的快速矩阵乘法工具,可在 Matlab 的文件交换中找到。

它很简单:

C = mtimesx(A,B) 

执行计算 C = A * B

于 2013-07-12T03:35:16.613 回答
1

除非我遗漏了什么,否则这是 bsxfun 的情况:

te=bsxfun(@times, k, permute(c,[3 4 1 2])); % c is a row vector

或者

te=bsxfun(@times, k, permute(c,[3 4 2 1])); % c is a column vector

这是假设 k 的第 4 维具有与 c 相同的大小。如果没有,那么您可以使用子矩阵索引:

te=bsxfun(@times, k(:,:,:,1:length(c)), permute(c,[3 4 2 1])); % c is a column vector
于 2013-07-12T10:45:04.230 回答