在Python中重塑numpy数组

3 投票
1 回答
42375 浏览
提问于 2025-04-16 21:06

我有一个48行365列的numpy数组,每个元素都是一个包含3个整数的列表。我想把它变成一个1行17520列的数组,保持这些列表不变。使用

np.reshape(-1)

这个方法似乎把每个元素拆分成了三个单独的整数,结果变成了一个1行52560列的数组。所以我需要一个新的方法来重新排列原来的数组,或者在新的np.reshape数组中把这些元素(它们的顺序还是对的)重新组合成3个一组的列表。

谢谢你的帮助。

1 个回答

6

你有没有想过为什么不能直接这么做呢?比如:

>>> 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]])

你也可以用 -1 来实现,只要和另一个合适大小的参数配对就行。

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

或者

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

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

a = numpy.recarray((17520,), dtype=[('x', int), ('y', int), ('z', int)])

这可以像你最开始尝试的那样进行重塑,也就是 reshape(-1)。不过,正如larsmans的评论所说,把你的数据当作一个三维数组来处理是最简单的。

撰写回答