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

时间:2015-04-29 08:16:34

标签: 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')

这是它产生的: 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

0 个答案:

没有答案