在高维空间中乘以矩阵

时间:2014-03-14 12:18:10

标签: arrays matlab

我们有例如这些矩阵:

M = rand(30,45,4);
U = rand(4,4);
  1. 在第一步中,我想将矩阵M的每个元素与U矩阵相乘,这是一个4元素向量。这将导致新的M1矩阵,其元素也是1x4。例如,M1(1,1,:) = M(1,1,:)*U;对于特定示例,这在矩阵维度中对应于1x4 = (1x4)(4x4)。整个M1矩阵与M具有相同的维度。

  2. 在第二步中,M1必须以相同的方式与M'相乘,并获得最终的F矩阵,该矩阵是具有1D元素的2D矩阵。例如,F(1,1) = M1(1,1,:)*M(1,1,:)';

  3. 换句话说,F矩阵的每个元素都是,其中1x4矩阵的M个元素。

    附加示例:

    M = rand(600, 800, 4);
    U = rand(4,4);
    F = nan(size(M,1),size(M,2));
    for i=1:size(M,1)*size(M,2)
        [r,c]=ind2sub(size(M),i);
        F(i) = squeeze(M(r,c,:))'*U*squeeze(M(r,c,:)); 
    end
    

    Elapsed time is 58.627296 seconds.

    @Luis Mendo回答:

    tic
    Mr = reshape(M, [], size(M,3));
    result = reshape(sum(Mr*U.*Mr,2), size(M,1), size(M,2));
    toc
    

    Elapsed time is 0.062898 seconds.

    请问有人建议不使用for循环的方法吗?

    谢谢你的时间!

    PS: Matlab 2013a 64x,Intel(R)Core(TM)i3 CPU 2.40 GHz,4GB内存

1 个答案:

答案 0 :(得分:1)

我仍然不确定我是否理解正确,但也许这就是你想要的:

Mr = reshape(M, [], size(M,4));
result = reshape(sum(Mr*U.*Mr,2), size(M,1), size(M,2));