[英]Converting a list of lists into a 2D numpy array
我有一个列表 X,其中包含一个列表列表......例如
X = [ [[], [], [], []], [[], [] ,[], []] ]
当我尝试使用np.array()
将上面 (X) 的这个列表转换为一个 numpy 数组时,我得到以下信息:
array([list([[],[],[],[]]),
list([list([[],[],[],[]]),....)
名单上的双关语是*。
我在这里做错了什么? 我只需要一个普通的数组形式,这样我就可以以列表不允许的方式索引它(即array[:,1]
)
如果您的列表长度不同(在每个嵌套维度中),您不能对 NumPy 数组进行传统转换,因为二维或更高版本的 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 数组,如下所示 -
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]]])
尝试这个:
>>> 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]])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.