我有一个形状为ndarray
的numpy (t, n, h, w, c)
。我想将其部分展平以得到形状为ndarray
的{{1}}。但是,我希望能够指定这种情况发生的顺序。具体地说,我希望它以“ (t*n, h, w, c)
-主要顺序”来显示。
假设我有一个n
的数组A
和一个A.shape = (128, 16, 160, 210, 3
的数组B
。它们几乎相同,除了前两个维已互换。
按如下所示对B.shape = (16, 128, 160, 210, 3)
进行平铺可对数据进行分组:
B
B = B.reshape(-1, *B.shape[2:])
平整B.shape = (2048, 160, 210, 3)
可以得到形状相同但数据顺序不同的数组。
我尝试了以下方法:
A
A = np.moveaxis(A, 0, 1)
我可以让它开始工作
A = A.reshape(-1, *A.shape[2:])
,其中A = np.asarray([A[:, i, ...] for i in range(n)])
是第二维的长度,但我觉得有一种更灵通的方法。
我认为,由于n
(和moveaxis
)创建了swapaxis
(应该 来更改遍历顺序),因此默认的展平顺序基于数据的原始顺序。
如何以我想要的方式展平view
?
答案 0 :(得分:0)
您可以使用X.reshape(t*n, h, w, c, order='F')
例如。
>>> x = np.array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
>>> x.shape
(2, 3, 4)
>>> x.reshape(2*3, 4, order='C')
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]])
>>> x.reshape(2*3, 4, order='F')
array([[ 0, 1, 2, 3],
[12, 13, 14, 15],
[ 4, 5, 6, 7],
[16, 17, 18, 19],
[ 8, 9, 10, 11],
[20, 21, 22, 23]])