在python中重塑一个numpy数组

Dou*_* AA 3 python numpy multidimensional-array reshape

我有一个48x365元素numpy数组,其中每个元素是一个包含3个整数的列表.我希望能够将其转换为1x17520数组,所有列表都作为元素保持不变.运用

np.reshape(-1)
Run Code Online (Sandbox Code Playgroud)

似乎将元素分成三个独立的整数并制作1x52560数组.所以我要么需要一种重新排列原始数组的新方法,或者将新np.reshape数组中的元素(仍然按顺序)分组回3的列表.

谢谢你的帮助.

sen*_*rle 5

有没有理由你不能明确地做到这一点?如:

>>> a = numpy.arange(17520 * 3).reshape(48, 365, 3)
>>> a.reshape((17520,3))
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [52551, 52552, 52553],
       [52554, 52555, 52556],
       [52557, 52558, 52559]])
Run Code Online (Sandbox Code Playgroud)

你也可以这样做-1,它只需要与另一个合适大小的arg配对.

>>> a.reshape((17520,-1))
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [52551, 52552, 52553],
       [52554, 52555, 52556],
       [52557, 52558, 52559]])
Run Code Online (Sandbox Code Playgroud)

要么

>>> a.reshape((-1,3))
array([[    0,     1,     2],
       [    3,     4,     5],
       [    6,     7,     8],
       ..., 
       [52551, 52552, 52553],
       [52554, 52555, 52556],
       [52557, 52558, 52559]])
Run Code Online (Sandbox Code Playgroud)

稍后我想到你也可以创建一个记录数组 - 这在某些情况下可能是合适的:

a = numpy.recarray((17520,), dtype=[('x', int), ('y', int), ('z', int)])
Run Code Online (Sandbox Code Playgroud)

这可以用您尝试的原始方式重新塑造,即reshape(-1).尽管如此,正如larsmans的评论所说,仅将数据视为3d数组是最简单的.