将不同列长度的numpy矩阵的条目放入一维数组中

时间:2017-05-21 22:06:27

标签: python arrays python-2.7 numpy

我在Python工作。我有一个长度为L的numpy数组,名为" arr",arr = np.empty(L, dtype = object)其中arr的每个条目都包含另一个numpy数组,但每个都有不同的长度(&# 39;为什么我使用dtype = object)。现在我想最有效地将arr中包含的每个条目都放入一个大的1D numpy数组中。所以换句话说,我希望在这个特定的顺序中有一个带有array([arr[0,0], arr[0,1], arr[0,2], ... , arr[1,0], arr[0,1], ...])的numpy数组。关于如何在Pyhton中写这个的任何帮助。

2 个答案:

答案 0 :(得分:1)

听起来你想要展平嵌套列表。也就是说,您的数组数组实际上是一个列表列表。有一个标准的Python习语,itertools.chain

制作一个数组样本数组:

In [828]: arr = np.array([np.arange(i) for i in range(1, 5)])
In [829]: arr
Out[829]: array([array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])], dtype=object)

导入和使用链。 *arr扩展arr,就好像它是一个列表:

In [830]: from itertools import chain
In [831]: list(chain(*arr))
Out[831]: [0, 0, 1, 0, 1, 2, 0, 1, 2, 3]
In [832]: np.array(_)
Out[832]: array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3])

但数组列表说明还建议我们可以使用np.concatenate(或np.hstack):

In [837]: np.concatenate(arr)
Out[837]: array([0, 0, 1, 0, 1, 2, 0, 1, 2, 3])

concatenate需要'列表',例如并加入它们的末端(在唯一的轴上)。

In [841]: list(arr)
Out[841]: [array([0]), array([0, 1]), array([0, 1, 2]), array([0, 1, 2, 3])]

答案 1 :(得分:0)

您是否尝试过flatten()方法?我认为这可能会奏效。

>>> arr = np.identity(5)
>>> arr.shape
(5, 5)
>>> arr = arr.flatten()
>>> arr.shape
(25,)