Matlab:将三维数组重塑为二维数组

Matlab: reshape 3-dimensional array into 2-dimensional array

我有一个 3x3x2000 的旋转矩阵数组,我需要将其转换为 2000x9 的数组。

我想我必须结合使用 permute() 和 reshape(),但我没有得到正确的输出顺序。

这是我需要的:

First row of 3x3 array needs to be columns 1:3 in the output
Second row of 3x3 array needs to be columns 4:6 in the output
Third row of 3x3 array needs to be columns 7:9 in the output

我已经尝试了以下代码中数字 1 2 3 的所有可能组合:

out1 = permute(input, [2 3 1]);
out2 = reshape(out1, [2000 9]);

但我总是以错误的顺序结束。对 Matlab 新手有什么建议吗?

您的 permute

搞错了
a = reshape(1:9*6, 3, 3, []); 

a是一个3x3x6的矩阵,每个

a(:,:,i) = 9*(i-1) + [1 4 7
                      2 5 8
                      3 6 9];

所以

out1 = permute(a, [3,1,2]);
out2 = reshape(out1, [], 9);

或在一行中

out3 = reshape(permute(a, [3,1,2]), [], 9);

所以

out2 = out3 =

     1     2     3     4     5     6     7     8     9
    10    11    12    13    14    15    16    17    18
    19    20    21    22    23    24    25    26    27
    28    29    30    31    32    33    34    35    36
    37    38    39    40    41    42    43    44    45
    46    47    48    49    50    51    52    53    54

一个简单的 for 循环怎么样?

for i=1:size(myinput,3)
    myoutput(i,:)=[myinput(1,:,i) myinput(2,:,i) myinput(3,:,i)];
    % or
    % myoutput(i,:)=reshape(myinput(:,:,i),[],9);
end

不像使用permutereshape那样简单,但它透明且易于调试。一旦你的程序中的一切都完美运行,你可以考虑在你的代码中重写这样的 for-loops...