是否可以使用mldivide" \"在Matlab中的三维矩阵

时间:2016-04-12 16:53:15

标签: matlab vectorization

是否可以在MATLAB中的3D矩阵上使用mldivide\)?我想避免使用for循环?

样品:

A = rand(4, 100, 5);
B = rand(4,4);

我需要执行:

C = B\A;

我现在在做什么:

在每个"切片"的for循环上应用mldivide我:

for i = 1:size(A, 3)    
    C(:,:,i) = B \ A(:,:,i); 
end

1 个答案:

答案 0 :(得分:6)

您可以将A重新整形为2D矩阵以执行除法,然后再返回到预期大小。由于MATLAB不会改变基础数据,reshape操作应该相对较快。

C = reshape(B \ reshape(A, size(A, 1), []), size(B, 1), size(A, 2), []);

如果我们打破这一点:

%// Reshape A to be 4 x 500
Anew = reshape(A, size(A, 1), []);

%// Perform left division
C = B \ Anew;

%// Reshape C to be the expected size (4 x 100 x 5)
C = reshape(C, size(B, 1), size(A, 2), []);

这适用于任何规模的任何有效(size(A, 1) == size(B, 2))矩阵AB