numpy.array不会将我的列表列表转换为Python3中的2d numpy数组

时间:2017-06-02 15:31:41

标签: python arrays numpy nested-lists

这是我有的列表

[[3, 2, 1, 2, 2, 3, 1], [3, 4, 2, 3, 1, 3, 2], [1, 2, 4, 1, 2, 4, 1], [3, 4, 3, 1, 4, 1, 2], [3, 1, 4, 1, 2, 3, 4], [3, 1, 3, 3, 2, 4, 1], [3, 2, 1, 2, 2, 3, 1], [3, 2, 1, 2, 2, 3, 1], [3, 2, 1, 2, 2, 3, 1], [3, 2, 1, 2, 2, 3, 1], [1, 2, 1, 2, 2, 3, 1], [4, 3, 1, 4, 1, 2, 3], [3, 2, 2, 1, 2, 1, 2], [3, 2, 1, 2, 2, 3, 1], [2, 2, 2, 1, 2, 4, 1], [1, 4, 3, 2, 2, 1, 4],....,[1, 2, 1, 1, 3, 1, 2], [3, 3, 4, 2, 3, 2, 1], [3, 2, 1, 2, 2, 2, 1], [4, 2, 1, 1, 4, 3, 4], [4, 4, 1, 2, 2, 4, 3], [3, 4, 3, 2, 2, 1, 4], [4, 1, 1, 3, 3, 4, 3]]

我尝试了numpy.array,但它提供了像这样的一维数组

[[3, 2, 1, 2, 2, 3, 1] [3, 1, 2, 4, 1, 4, 4] [1, 2, 4, 1, 2, 4, 1] ...,
 [4, 4, 1, 2, 2, 4, 3] [3, 4, 3, 2, 2, 1, 4] [4, 1, 1, 3, 3, 4, 3]]

,其大小为(15410),这意味着它未被创建为2D。

我甚至尝试过使用np.vstack和np.concatenate。但它表示所有列表必须具有相同的维度。它们的长度都相同。我不明白为什么我会收到此错误。我正在使用python3。还有一种更好的方法将列表列表转换为2D numpy数组吗?

编辑:将列表列表转换为numpy数组的代码:

      print(testFeature)
      x_test=np.array(testFeature)
      print(x_test)
      print (x_test.shape)

2 个答案:

答案 0 :(得分:2)

如果列表名为l,则下面的代码可以帮助您找到有问题的元素。

for i,v in enumerate(l):
    if(len(v)!=len(l[0])):
        print('bad element {} at {}'.format(v,i))

修复这些元素应该有助于解决问题。

答案 1 :(得分:1)

numpy数组的size字段是其中元素的总数。您正在寻找的阵列的2D结构可通过'形状来访问。字段。

编辑: 您是否注意到您的子列表(显然)长度为7,但15410不是7的倍数?这意味着您的子列表不能具有相同的长度,这与您从np.vstack获得的错误一致