numpy 中不按排序顺序的掩码值
Mask values that are not in sort order in numpy
我有一个复杂的计算,我希望结果是一个数组,其中的值按排序顺序排列。但是,由于某些关键点的数值错误,某些结果值是错误的。我想掩盖这些价值观。我应该怎么做?
这是一个等效函数,但假设值从高到低排序,并且外部值总是大于预期值。请问有没有更简单高效的方法呢
def maskoutsiders(a):
mask = numpy.zeros(len(a))
lastval = a[0]
for i in range(1, len(a)):
if a[i] > lastval:
mask[i] = 1
else:
lastval = a[i]
return ma.masked_array(a, mask=mask)
当a
要递减时,可以使用:
mask = a > np.minimum.accumulate(a)
当a
应该增加时,你可以使用:
mask = a < np.maximum.accumulate(a)
(np
是 numpy
。)
例如,
In [44]: def mymaskoutsiders(a):
....: mask = a > np.minimum.accumulate(a)
....: return ma.masked_array(a, mask=mask)
....:
将结果与此数组进行比较:
In [100]: x
Out[100]: array([ 13. , 16.5, 15.5, 11.5, 6. , 9.5, 5.5, 9. , 5. , 2.5])
这是你的函数:
In [101]: maskoutsiders(x)
Out[101]:
masked_array(data = [13.0 -- -- 11.5 6.0 -- 5.5 -- 5.0 2.5],
mask = [False True True False False True False True False False],
fill_value = 1e+20)
这是我的版本:
In [102]: mymaskoutsiders(x)
Out[102]:
masked_array(data = [13.0 -- -- 11.5 6.0 -- 5.5 -- 5.0 2.5],
mask = [False True True False False True False True False False],
fill_value = 1e+20)
我有一个复杂的计算,我希望结果是一个数组,其中的值按排序顺序排列。但是,由于某些关键点的数值错误,某些结果值是错误的。我想掩盖这些价值观。我应该怎么做?
这是一个等效函数,但假设值从高到低排序,并且外部值总是大于预期值。请问有没有更简单高效的方法呢
def maskoutsiders(a):
mask = numpy.zeros(len(a))
lastval = a[0]
for i in range(1, len(a)):
if a[i] > lastval:
mask[i] = 1
else:
lastval = a[i]
return ma.masked_array(a, mask=mask)
当a
要递减时,可以使用:
mask = a > np.minimum.accumulate(a)
当a
应该增加时,你可以使用:
mask = a < np.maximum.accumulate(a)
(np
是 numpy
。)
例如,
In [44]: def mymaskoutsiders(a):
....: mask = a > np.minimum.accumulate(a)
....: return ma.masked_array(a, mask=mask)
....:
将结果与此数组进行比较:
In [100]: x
Out[100]: array([ 13. , 16.5, 15.5, 11.5, 6. , 9.5, 5.5, 9. , 5. , 2.5])
这是你的函数:
In [101]: maskoutsiders(x)
Out[101]:
masked_array(data = [13.0 -- -- 11.5 6.0 -- 5.5 -- 5.0 2.5],
mask = [False True True False False True False True False False],
fill_value = 1e+20)
这是我的版本:
In [102]: mymaskoutsiders(x)
Out[102]:
masked_array(data = [13.0 -- -- 11.5 6.0 -- 5.5 -- 5.0 2.5],
mask = [False True True False False True False True False False],
fill_value = 1e+20)