将(4D矩阵* 1D向量)运算转换为无循环的独立(3D矩阵* 0D标量)运算

时间:2013-07-12 00:56:35

标签: matlab loops vectorization

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

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

我试图将4D矩阵k乘以向量c,将其分解为独立的(3D矩阵*标量)运算。我已经在这个函数文件的while循环中有另外两个不可避免的for循环,并且我尽力避免循环。

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

-SC

2 个答案:

答案 0 :(得分:5)

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

这很简单:

C = mtimesx(A,B) 

执行计算C = A * B

答案 1 :(得分: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的第四维具有与c相同的尺寸。如果没有,那么您可以使用子矩阵索引:

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