将4D矩阵切成2D切片MatLab

时间:2016-10-20 17:12:06

标签: matlab matrix multidimensional-array

我有一个巨大的4D矩阵,我需要将其切割成2D矩阵。一个接一个地手动执行此操作很容易:

a.reshape(-1,a.shape[-1])

等 但是我无法使用循环来解决这个问题。到目前为止,我所看到的一切都重塑了原始矩阵(我不想要)。

1 个答案:

答案 0 :(得分:1)

您只需使用一对for循环,并让两个访问变量访问您想要的正确切片 1

for ii = 1 : size(fourDMatrix, 3)
    for jj = 1 : size(fourDMatrix, 4)
        slice = fourDMatrix(:, :, ii, jj);
        % Do your processing here...
    end
end

但是,如果我建议使用reshape,您应该使用它。您可以使用reshape创建一个3D矩阵,其中每个切片都是来自您的4D矩阵的2D切片,您只需执行以下操作:

slices = reshape(fourDMatrix, size(fourDMatrix, 1), size(fourDMatrix,2), []);

这将创建一个3D矩阵,其中行和列等于4D矩阵中的行和列。但是,代码末尾的[]将自动展开您的4D矩阵,以便它首先沿第三个维度发生,然后是第四个维度。它基本上决定了3D矩阵中有多少2D切片,这将自动计算。例如,如果您的4D矩阵被称为A且大小为9 x 9 x 4 x 4,则上述代码将创建9 x 9 x 16矩阵,其中slices(:,:,1)对应A(:,:,1,1),{ {1}}对应slices(:,:,2)A(:,:,2,1);对应slices(:,:,6)。通常,A(:,:,2,2)会访问slices(:,:,kk)处的切片。

1:变量名不能以MATLAB中的数字开头。我已将您的变量重命名为A(:,:,floor(kk/size(A,2)) + 1, mod(kk,size(A,2)) + 1