使用重塑我有一些问题。我想重塑一个四维矩阵,第四个维度必须成为一个列。
所以,如果我有:
A(:,:,1,1)=
1 4
2 5
A(:,:,2,1)=
2 5
3 6
A(:,:,1,2)=
10 14
12 15
A(:,:,2,2)=
12 15
13 16
我的重塑应该是:
第1栏至第5栏
1 4 2 5 2
10 14 12 15 12
第6至8栏
5 3 6
15 13 16
答案 0 :(得分:0)
这应该有效:
reshape(permute(A,[1 4 2 3]),[2 8])
要理解这一点,您可以一步一步走。首先执行以下操作:
reshape(A,[2 8])
ans =
1 2 2 3 10 12 12 13
4 5 5 6 14 15 15 16
您观察到重塑矩阵的列是通过在原始矩阵中的第二维上滑动而获得的。在第二个维度结束后,您将滑动到第三维并重新遍历第二维(此处第一维是行,第二维是列,依此类推......)。
你想要做的是,迭代第四维(就好像它是第二维)。在(4,14)
之后您还需要(1,10)
。您可以看到相应的元素在第二维度上有所不同(但reshape
将在第三维上滑动,无论如何。因此,交换第二维和第三维。)
最后,你得到reshape(permute(A,[1 4 2 3]),[2 8])
。
我总是很难向某人解释permute
。我希望我不会让你更加困惑。
答案 1 :(得分:0)
您必须先进行排列才能将尺寸放入适当的顺序。试试这个:
reshape(permute(A,[4,2,1,3]),[2,8])
或将其分解为两个单独的排列,一个用于在原始数组中切换尺寸1和2,然后重塑为8x2,然后进行转置:
reshape(permute(A,[2,1,3,4]),[8,2])'