我有一个列表X,其中包含一个列表列表...例如
X = [ [[], [], [], []], [[], [] ,[], []] ]
当我尝试使用(x)将上面的列表转换为numpy数组时
np.array()
,我得到以下信息:
array([list([[],[],[],[]]),
list([list([[],[],[],[]]),....)
并且该列表以双关语为准。
我在这里做错了什么?我只需要以常规数组形式使用它,这样我就可以用列表不允许的方式对它进行索引(即array[:,1]
)
答案 0 :(得分:2)
如果列表的长度不同(在每个嵌套维度中),则您不能对传统的NumPy数组进行转换,因为2D或以上的NumPy数组在其第一维中必须具有相同数量的元素
因此您不能直接将[[1,2],[3,4,5]]
转换为numpy数组。应用np.array
将为您提供2个元素的numpy数组,其中每个元素都是-array([list([1, 2]), list([3, 4, 5])], dtype=object)
的列表对象。我相信这是您面临的问题。
例如,您无法创建2D矩阵-
[[1,2,3,?],
[4,5,6,7]]
您可能需要做的是在转换为NumPy数组之前,将列表列表的每个列表的元素填充到固定长度(每个维度的长度相等)。
我建议按照下面编写的代码遍历列表列表中的每个列表,以展平您的数据,然后以所需的方式对其进行转换。
如果您的列表长度相同,那么numpy版本1.18.5
或更高版本应该不会有问题。
a = [[[1,2],[3,4]],[[5,6],[7,8]]]
np.array(a)
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
但是,如果仍然无法使用列表列表,则可能需要首先遍历每个元素以拉平列表,然后将其更改为具有所需形状的numpy数组,如下所示-< / p>
a = [[[1,2],[3,4]],[[5,6],[7,8]]]
flat_a = [item for sublist in a for subsublist in sublist for item in subsublist]
np.array(flat_a).reshape(2,2,2)
array([[[1, 2],
[3, 4]],
[[5, 6],
[7, 8]]])
答案 1 :(得分:0)
尝试一下:
>>> import numpy as np
>>> a = np.array([[[1,2],[3,4],[5,6]],[[7,8],[9,10],[11,12]]])
>>> a
array([[[ 1, 2],
[ 3, 4],
[ 5, 6]],
[[ 7, 8],
[ 9, 10],
[11, 12]]])
>>> a.reshape(4,-1)
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[10, 11, 12]])
>>> a.reshape(1,-1)
array([[ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]])