Python3 Numpy np.where错误

时间:2018-08-04 01:20:37

标签: arrays python-3.x list numpy

我有2个这样的列表

x = [None,[1, 15, 175, 20],
    [150, 175, 18, 20],
    [150, 175, 18],
    [192, 150, 177],...]


y = [None,[12, 43, 55, 231],
    [243, 334, 44, 12],
    [656, 145, 138],
    [12, 150, 177],
    [150, 177, 188],...]

现在,我要擦除小于30的x值和与擦除的x值相对应的y值。 (例如,x [1]和y [1]中的(x,y)=(1,12))

为此,我尝试在Numpy中使用np.where。

我使用np.array将x和y列表转换为数组,并将其用于x

array([None, list([11]), list([12, 11]), ..., list([12, 13]),list([13, 13]), list([13, 15])], dtype=object)

然后我使用np.where(a <30)并收到此错误

TypeError: '>' not supported between instances of 'NoneType' and 'int'

我认为第一个列表中的None值是问题,所以我实现了

np.where(a[1:]>30)

然后我得到了     TypeError:“ list”和“ int”的实例之间不支持“>”

我是一个初学者,想知道是什么导致了此错误。

1 个答案:

答案 0 :(得分:0)

使用列表理解:

In [161]: x = [None,[1, 15, 175, 20],
     ...:     [150, 175, 18, 20],
     ...:     [150, 175, 18],
     ...:     [192, 150, 177]]
     ...:     

我们要从x(和y?)中删除的项目的索引。我使用x[1:]跳过了需要额外测试的None

In [163]: [(i,j) for i,v1 in enumerate(x[1:]) for j,v2 in enumerate(v1) if v2<30]
Out[163]: [(0, 0), (0, 1), (0, 3), (1, 2), (1, 3), (2, 2)]

x>=30的值:

In [164]: [[v2 for v2 in v1 if v2>=30] for v1 in x[1:]]
Out[164]: [[175], [150, 175], [150, 175], [192, 150, 177]]

我们可以使用Out[163]值从y中删除项目。另外,我们可以一起迭代xyzip(x,y)等)。

如果列表理解太凌乱,则可以将其重写为循环,也可以重写为函数。

对于像这样的不规则嵌套列表结构,我看不出使用numpy有什么意义。对象dtype数组基本上是列表(但没有有用的列表方法)。