在Python中重塑numpy数组
我有一个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的评论所说,把你的数据当作一个三维数组来处理是最简单的。