2

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

    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, 10, 3] 并且 low=4 我想返回低于 4 的索引,在这种情况下将是 [4,6]

4

2 回答 2

5

当您执行此操作y > low时,返回的是一个布尔数组,其大小与 相同y,在True哪里满足条件,False哪里不满足。要获取Trues 的索引,您可以使用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].

于 2013-06-25T15:06:07.443 回答
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)] 
于 2013-06-25T14:53:46.460 回答