Python 如何检查数组中至少五个元素的邻域是否满足条件?

Python 如何检查数组中至少五个元素的邻域是否满足条件?,python,numpy,signal-processing,Python,Numpy,Signal Processing,我有一个numpy数组,我检查局部极小值是否低于阈值(平均值-3*标准偏差)。从这些极小值中,我想选择那些在至少五个点附近的,并且都低于阈值的。如果某个邻域包含多个极小值,我想知道哪个极小值的值最小。如何做到这一点并使其运行相对较快 类似于B.M.建议的代码并不能满足我的需要 from numpy import * a=random.rand(10) n = ones(7) threshold=0.5 u=convolve(a<t,n,'same') 从numpy导入* a=随机。兰德

我有一个numpy数组,我检查局部极小值是否低于阈值(平均值-3*标准偏差)。从这些极小值中,我想选择那些在至少五个点附近的,并且都低于阈值的。如果某个邻域包含多个极小值,我想知道哪个极小值的值最小。如何做到这一点并使其运行相对较快

类似于B.M.建议的代码并不能满足我的需要

from numpy import *

a=random.rand(10)
n = ones(7)
threshold=0.5
u=convolve(a<t,n,'same')
从numpy导入*
a=随机。兰德(10)
n=一(7)
阈值=0.5
u=convalve(位置4处为0.9,位置9处的元素称为一组4个元素,而我认为它是一组5个元素

这是我目前对该问题的解决方案:

    layer = Xa
    while layer > overlap:
        if d[layer] > d[layer+1] and d[layer] > d[layer-1]:
            if layer > 300:
                threshold = threshold_free
            else:
                threshold = threshold_PBL
            if d[layer] <= threshold:
                upper_limit = layer
                lower_limit = layer

                k = 1
                kp = 0
                while kp < k and layer + kp < Xa:
                    kp = k
                    if d[layer+k] <= threshold:
                        upper_limit = layer + k
                        k += k
                k = 1
                kp = 0
                while kp < k and layer - kp > overlap:
                    kp = k
                    if d[layer-k] <= threshold:
                        lower_limit = layer - k
                        k += k

                transition_interval = upper_limit - lower_limit
                if transition_interval >= 5:
                    print layer, upper_limit, lower_limit, upper_limit - lower_limit
                    layer = lower_limit
                    if valid_time in layers:
                        layers[valid_time].append(layer)
                    else:
                        layers[valid_time] = [layer]
        layer -= 1
layer=Xa
当图层>重叠时:
如果d[layer]>d[layer+1]和d[layer]>d[layer-1]:
如果图层>300:
阈值=无阈值
其他:
阈值=阈值

如果d[layer]有一些技巧可以做到这一点:

from numpy import *
from matplotlib.pyplot import *
from scipy.signal import convolve2d 
from scipy.ndimage.filters import minimum_filter as mini

a=random.rand(100,100)
neighbours = ones((3,3))
threshold=0.2
u=convolve2d(a<threshold,neighbours,'same')
mins=((u>=6)*(a<threshold))
minis=mini(choose(mins,(1,a)),size=(3,3))==a

subplot(121);imshow(mins,cmap=cm.gray_r,interpolation='none')
subplot(122);imshow(minis,cmap=cm.gray_r,interpolation='none')
从numpy导入*
从matplotlib.pyplot导入*
从scipy.signal导入卷积2D
从scipy.ndimage.filters将最小过滤器导入为mini
a=随机的。兰特(100100)
邻居=一((3,3))
阈值=0.2

u=convolve2d(a=6)*(a您能展示一下您尝试过的内容以及遇到的问题/错误吗?谢谢,我试过了,但没有达到我需要的效果。