如何转换相同长度的数组列表

时间:2019-02-19 13:29:43

标签: python arrays list numpy

如果我在数组数组中转换数组列表(内部数组的长度都相同),则python将所有元素组合在一起的矩阵转换为矩阵。我希望它始终保持数组数组。这是发生了什么:

list_1 = [[np.array([1,2,3]),np.array([4,5,6])]]

>>> np.array(list_1)
array([[[1, 2, 3],
        [4, 5, 6]]])

但我会:

>>> np.array(list_1)
array([array([1, 2, 3]), array([4, 5,6])], dtype=object)

我该如何实现?

2 个答案:

答案 0 :(得分:1)

list_1 = [[np.array([1,2,3]),np.array([4,5,6])]]
l = np.array(list_1)
print(l.tolist())

结果:

[[[[1,2,3],[4,5,6]]]

答案 1 :(得分:1)

In [20]: list_1 = [[np.array([1,2,3]),np.array([4,5,6])]] 

分配大小合适的对象dtype数组:

In [27]: arr = np.empty(2, object)                                              

将值从列表复制到该数组:

In [28]: arr[:] = list_1[0]                                                     
In [29]: arr                                                                    
Out[29]: array([array([1, 2, 3]), array([4, 5, 6])], dtype=object)

有时候广播会导致这种复制出现问题,我不得不依靠更明确的迭代方式:

In [30]: for i in range(2): 
    ...:     arr[i] = list_1[0][i] 

您的list_1有一组额外的括号,因此需要使用list_1[0]

我在评论中链接的最近一个问题对于为什么np.array(list_1)通常会生成2d(实际上是3d)数组有很多很好的答案。