Python 如何检查数组中至少五个元素的邻域是否满足条件?
我有一个numpy数组,我检查局部极小值是否低于阈值(平均值-3*标准偏差)。从这些极小值中,我想选择那些在至少五个点附近的,并且都低于阈值的。如果某个邻域包含多个极小值,我想知道哪个极小值的值最小。如何做到这一点并使其运行相对较快 类似于B.M.建议的代码并不能满足我的需要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=随机。兰德
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您能展示一下您尝试过的内容以及遇到的问题/错误吗?谢谢,我试过了,但没有达到我需要的效果。