python - Numpy:数组项的测试高于某个值,连续 x 次?

标签 python numpy

我正在尝试测试数组中的值是否连续多次高于某个值。

例如

arr1 = np.array([1,2,1,3,4,5,6,7])
arr2 = np.array([1,2,1,3,4,2,6,7])

假设我想测试数组中的某项是否连续四个周期为 >=3。测试将为 arr1 返回 true,但为 arr2 返回 false

最佳答案

这是 convolution 的一种方式-

def cross_thresh_convolve(arr, thresh, N):
    # Detect if arr crosses thresh for N consecutive times anywhere
    return (np.convolve(arr>=thresh,np.ones(N,dtype=int))==N).any()

或者使用 binary-dilation -

from scipy.ndimage.morphology import binary_erosion

def cross_thresh_erosion(arr, thresh, N):
    return binary_erosion(arr>=thresh, np.ones(N)).any()

样本运行-

In [43]: arr1 = np.array([1,2,1,3,4,5,6,7])
    ...: arr2 = np.array([1,2,1,3,4,2,6,7])

In [44]: print cross_thresh_convolve(arr1, thresh=3, N=4)
    ...: print cross_thresh_erosion(arr1, thresh=3, N=4)
    ...: print cross_thresh_convolve(arr2, thresh=3, N=4)
    ...: print cross_thresh_erosion(arr2, thresh=3, N=4)
True
True
False
False

一般比较

为了涵盖一般比较,假设我们要寻找大于小于,或者甚至只是比较一个值是否相等,我们可以使用 NumPy 内置比较函数来替换早期解决方案中的 arr>=thresh 部分,从而为我们提供通用实现,就像这样 -

def consecutive_comp_convolve(arr, comp, N, comparison=np.greater_equal):
    return (np.convolve(comparison(arr,comp),np.ones(N,dtype=int))==N).any()

def consecutive_comp_erosion(arr, comp, N, comparison=np.greater_equal):
    return binary_erosion(comparison(arr,comp), np.ones(N)).any()

因此,我们的具体案例运行将是 -

consecutive_comp_convolve(arr1, comp=3, N=4, comparison=np.greater_equal)
consecutive_comp_erosion(arr1, comp=3, N=4, comparison=np.greater_equal)
consecutive_comp_convolve(arr2, comp=3, N=4, comparison=np.greater_equal)
consecutive_comp_erosion(arr2, comp=3, N=4, comparison=np.greater_equal)

关于python - Numpy:数组项的测试高于某个值,连续 x 次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53228719/

相关文章:

python - 将分类变量列表转换为 (0,1) 列表

python - 获取属性定义中的类名

python - 如何使用 py(py)odbc 从 python 连接到远程 MS SQL Server

python - Einsum 优化基本操作失败

python - 使用 numpy 和 pandas 本地化随机点

python - AttributeError: 'module' 对象没有属性 'lowercase'

python - TemplateDoesNotExist 在/blog/index.html

python - Django 多个数据库 - 关系不存在;第 1 行 : SELECT COUNT(*) AS "__count" FROM

Python CGI 返回一个 http 状态代码,例如 403?

python - 将系数向量分配回 scikit learn Lasso 中的特征