【发布时间】:2020-05-05 11:05:32
【问题描述】:
在 MATLAB 中,我有一个矩阵 (3x3) 数组 (512x512x512)。也就是说,我有一个大小为 (512x512x512x3x3) 的数组,其中 3x3 矩阵作为元素。我想在数组的每个元素处取矩阵求逆。有没有办法在不遍历三个维度的情况下做到这一点?例如,执行此操作的“蛮力”方法将是以下伪代码:
CoB_inv_size = size(CoB);
CoB_inv = zeros(CoB_inv_size); % array of size (512x512x512x3x3)
for i = 1:CoB_inv_size(1) % 512
for j = 1:CoB_inv_size(2) % 512
for k = 1:CoB_inv_size(3) % 512
CoB_inv(i,j,k,:,:) = inv(CoB(i,j,k,:,:));
end
end
end
上面的数组CoB 是一个基变化矩阵数组(其中列是特征向量)。我需要这些矩阵的逆矩阵,它们将与另一个对角矩阵一起使用,以使用M=SDS^(-1) 在原始基础上获得矩阵数组。 S 和 S^(-1) 分别由 CoB 和 CoB_inv 表示。有没有办法在 MATLAB 中更快或更有效地执行上述操作?
【问题讨论】:
-
不,(简短回答)。
arrayfun函数将函数应用于矩阵/数组的每个元素。虽然,您可以使用解决方法并创建一个存储 3x3 矩阵的单元格数组,然后使用cellfun-function 和cellfun(@inv,YourCellArray)