我在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中写这个的任何帮助。
答案 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,)