python - numpy 中不按排序顺序的掩码值

标签 python numpy

我有一个复杂的计算,我希望结果是一个数组,其中的值按排序顺序排列。但是,由于某些关键点的数值错误,某些结果值是错误的。我想掩盖这些值(value)观。我应该怎么做?

这是一个等价函数,但假设值从高到低排序,并且局外人总是大于预期值。我想知道是否有更简单、更有效的方法来做到这一点。

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)

(npnumpy。)

例如,

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)

关于python - numpy 中不按排序顺序的掩码值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28054501/

相关文章:

python - 如何将原始字节数组作为二进制文件写入谷歌云存储

numpy 中轴向赢家通吃的 pythonic 方式

Python 和 Numba : incorrect checksum for freed object

python - 正则表达式/正则表达式 Python 2.7

python - 将每个请求的 json 响应写入文件

python - 将两个字典与 numpy 矩阵作为值进行比较

python - 当另一列增加/减少时添加状态列

python - cimport 给出 fatal error : 'numpy/arrayobject.h' file not found

python - 将字典的 numpy ndarray 转换为 DataFrame

python - 创建随机数列表并过滤列表以仅包含大于 50 的数字