MATLAB:将N x 4数组置换并重塑为2 x 2 x N数组

时间:2018-08-28 23:39:26

标签: arrays matlab reshape transpose

我有一个问题,似乎应该有一个简单的答案,可以避免for循环。

假设我在MATLAB中定义了一个 N x 4数组:

A = [1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4; 1 2 3 4];

在此示例中, N = 6,但这是任意的。我想将 A 重新排列为新数组 B ,它是2 x 2 x N 形式的数组:

B(:,:,1) = [1 2; 3 4];
B(:,:,2) = [1 2; 3 4];

...

B(:,:,N) = [1 2; 3 4];

这似乎是一个简单的问题,我尝试了多种方法,例如:

B = reshape(A',2,2,N);

但是,这会导致

B(:,:,1) = [1 3; 2 4];
B(:,:,2) = [1 3; 2 4];

...

B(:,:,N) = [1 3; 2 4];

我觉得必须使用一种我缺少的“重塑”,“置换”和/或“移调”的组合在一行中完成此操作的简单方法。任何建议表示赞赏。

1 个答案:

答案 0 :(得分:4)

您只缺少最后一个permute。这是必需的,因为Matlab是主要列的,因此它将填充新数组,然后填充:

B = permute(reshape(A.', 2,2,N), [2 1 3]);