将Numpy数组拆分为等长子数组

时间:2017-10-31 20:24:43

标签: python arrays numpy

我有一个非常庞大的numpy数组:

np.array([1, 2, 3, 4, 5, 6, 7 , ... , 12345])

我需要在另一个数组中创建n元素的子组(在示例n = 3中),如下所示:

np.array([[1, 2, 3],[4, 5, 6], [6, 7, 8], [...],  [12340, 12341, 12342], [12343, 12344, 12345]])

我使用普通的python列表完成了这项工作,只是将子组附加到另​​一个列表中。但是,我很难在numpy中尝试这样做。

任何想法我该怎么做?

谢谢!

2 个答案:

答案 0 :(得分:2)

您可以使用np.reshape()

从文档(标题中的链接):

  

<强> numpy.reshape(a, newshape, order='C')

     

为数组提供新形状而不更改其数据。

以下是如何将其应用于您的情况的示例:

>>> import numpy as np
>>> a = np.array([1, 2, 3, 4, 5, 6, 7, 8, 12345])
>>> a.reshape((int(len(a)/3), 3))
array([[1, 2, 3],
       [4, 5, 6],
       [7, 8, 12345]], dtype=object)

请注意,很明显,arraylen(a))的长度必须是3的倍数才能reshape成{ {1}} 2-dimensional numpy,因为它们必须是矩形的。

答案 1 :(得分:2)

您可以使用np.reshape(-1, 3)-1表示&#34;剩下的任何内容&#34;。

>>> array = np.arange(1, 12346)
>>> array
array([    1,     2,     3, ..., 12343, 12344, 12345])
>>> array.reshape(-1, 3)
array([[    1,     2,     3],
       [    4,     5,     6],
       [    7,     8,     9],
       ..., 
       [12337, 12338, 12339],
       [12340, 12341, 12342],
       [12343, 12344, 12345]])