我正在从文本文件中读取数组并希望消除某个值下的数据,但我也想知道它们在已删除值的数组中的位置,因此我可以使用它来删除其他数据。如果数据低于某个值,我的代码将删除数据但是如何找到已删除的数据的标记?
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]
答案 0 :(得分:5)
执行y > low
返回的是一个布尔数组,其大小与y
相同,True
符合条件,False
所在的位置不是。要获取True
的索引,您可以使用np.where
或np.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)]