MATLAB:将一个 N x 4 数组重新排列和重塑为一个 2 x 2 x N 数组

3

我是一个有用的助手,可以为您翻译文本。

我有一个问题,看起来应该有一个简单的答案,可以避免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];

我觉得一定有一种简单的方法可以使用"reshape","permute"和/或"transpose"的某些组合来完成此操作,但我可能错过了。欢迎任何建议。

1个回答

4
您只需要添加最后一个permute。这是必需的,因为Matlab是按列排序的,所以它会先在下面填充新数组,然后在横向填充。
B = permute(reshape(A.', 2,2,N), [2 1 3]);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接