如果列表超出某个值,则查找列表的索引。蟒蛇,numpy

时间:2013-06-25 14:47:36

标签: python numpy

我正在从文本文件中读取数组并希望消除某个值下的数据,但我也想知道它们在已删除值的数组中的位置,因此我可以使用它来删除其他数据。如果数据低于某个值,我的代码将删除数据但是如何找到已删除的数据的标记?

    y=np.genfromtxt('01_temp.txt').T[0]
    b=np.std(y)
    c=np.mean(y)
    low=c-b
    high=c+b
    x=[i for i in y if i>low]
    print x

我认为波纹管代码也与上面的相同

y=np.genfromtxt('01_temp.txt').T[0]
b=np.std(y)
c=np.mean(y)
low=c-b
high=c+b
ok=y>low
y[ok]=low

如何找到超出我设定范围的值的索引?

例如,如果我的列表是[5,5,8,9,0,13]和low = 4,我想返回下面的索引4,对于这种情况,它将是[4,6]

2 个答案:

答案 0 :(得分:5)

执行y > low返回的是一个布尔数组,其大小与y相同,True符合条件,False所在的位置不是。要获取True的索引,您可以使用np.wherenp.nonzero

>>> a = np.random.randint(10, size=(10,))
>>> a
array([3, 7, 5, 9, 3, 7, 0, 7, 0, 0])
>>> a > 3
array([False,  True,  True,  True, False,  True, False,  True, False, False], dtype=bool)
>>> np.where(a > 3)
(array([1, 2, 3, 5, 7], dtype=int64),)
>>> np.nonzero(a > 3)
(array([1, 2, 3, 5, 7], dtype=int64),)

请注意,返回的是一个数组元组,因此对于1D情况,您可能最终会执行类似indices = np.where(y > low)[0]的操作。

答案 1 :(得分:0)

这样的事情不适合你:

>>> y = [3,4,5,3,2,4,6,3]
>>> low = 3
>>> x=[(i,j) for i,j in enumerate(y) if i>low]
>>> x
[(4, 2), (5, 4), (6, 6), (7, 3)]
>>> x=[(i,j) for i,j in enumerate(y) if i<low]
>>> x
[(0, 3), (1, 4), (2, 5)]