是否可以在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
答案 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)
)矩阵A
和B
。