gpt4 book ai didi

python - 如何检查数组中至少五个元素的邻域是否满足标准?

转载 作者:行者123 更新时间:2023-12-01 04:43:49 26 4
gpt4 key购买 nike

我有一个 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 的元素,这是不理想的行为,因为位置 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

最佳答案

一些技巧:

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')

该脚本产生: minimuns

左图有 5 个邻居,右图只选择了最小值。如果您需要索引和值,请使用 inds=mask_indices(100,lambda x,k: minis)a[inds]

关于python - 如何检查数组中至少五个元素的邻域是否满足标准?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29938028/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com