我有一个numpy数组,我检查低于阈值的局部最小值(平均值-3 *标准差)。在这些最小值中,我想选择那些在至少五个点附近的值,这些点都低于阈值。如果某个邻域包含多个最小值,我想知道哪个最小值具有最小值。怎么做,让它运行得相对较快?
类似于B.M.建议的代码。并不能完全满足我的需要。
from numpy import *
a=random.rand(10)
n = ones(7)
threshold=0.5
u=convolve(a<t,n,'same')
这是它产生的: X 数组([0.6034448,0.16098872,0.39563129,0.33611677,0.90138981, 0.26088853,0.45720198,0.100786,0.47705187,0.15514734]) ü 数组([3.,3.,4.,5.,6.,6.,6.,5.,5.,4。])
这表明指数6处的元素是低于阈值6个点的邻域的一部分。我猜它也计算了索引为3的元素,这不是理想的行为,因为有值&gt;位置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