Python 峰值检测器-检测小峰值

Python 峰值检测器-检测小峰值,python,numpy,Python,Numpy,我正在浏览并理解每一行,除了他检测到比最小峰值距离更近的小峰值的部分: if ind.size and mpd > 1: ind = ind[np.argsort(x[ind])][::-1] # sort ind by peak height idel = np.zeros(ind.size, dtype=bool) for i in range(ind.size): if not idel[i]:

我正在浏览并理解每一行,除了他检测到比最小峰值距离更近的小峰值的部分:

if ind.size and mpd > 1:
        ind = ind[np.argsort(x[ind])][::-1]  # sort ind by peak height
        idel = np.zeros(ind.size, dtype=bool)
        for i in range(ind.size):
            if not idel[i]:
                # keep peaks with the same height if kpsh is True
                idel = idel | (ind >= ind[i] - mpd) & (ind <= ind[i] + mpd) \
                    & (x[ind[i]] > x[ind] if kpsh else True)
                idel[i] = 0  # Keep current peak
        # remove the small peaks and sort back the indices by their occurrence
        ind = np.sort(ind[~idel])
如果ind.size和mpd>1:
ind=ind[np.argsort(x[ind])][::-1]#按峰值高度对ind进行排序
idel=np.zero(ind.size,dtype=bool)
对于范围内的i(独立尺寸):
如果不是idel[i]:
#如果kpsh为真,则保持峰值高度相同
idel=idel |(ind>=ind[i]-mpd)和(如果kpsh为真,则为ind x[ind]
idel[i]=0#保持当前峰值
#移除小峰值,并根据其出现情况对索引进行排序
ind=np.sort(ind[~idel])
特别是,我不明白这句话:

idel = idel | (ind >= ind[i] - mpd) & (ind <= ind[i] + mpd) \
                        & (x[ind[i]] > x[ind] if kpsh else True)
idel=idel |(ind>=ind[i]-mpd)和(如果kpsh为真,则为ind x[ind]
据我所知,他按峰值高度对峰值数组(
ind
)进行排序,并创建一个大小相同的布尔数组,并用假值初始化它。然后他遍历
idel
数组,首先检查当前值是否为0(false)

我已经分别运行了下一行的不同布尔比较,但无法确定他是如何使用
mpd
,因为他在数组和元素级别使用
ind
。有人能给我一个快速的解释吗?我被困在这一点上


提前谢谢

回想一下,
kpsh
是一个覆盖
mpd
的选项。通常,如果选择了
mpd
,则在任何给定长度段
2*mpd
中只能看到一个峰值。但是,如果选择了
kpsh
,则共享相同高度的山峰除外,因为这是一种平局情况

现在,让我们分析一下:

(ind>=ind[i]-mpd)和(ind x[ind],如果kpsh为真)
。我将称之为
arr\u kpsh

  • 案例1:
    kpsh==False
    使
    arr\u kpsh
    成为
    True
    s的数组。由于使用
    执行按位\u或操作,
    arr\u mpd和arr\u kpsh
    将立即等于
    arr\u mpd
    ,因此
    arr\u kpsh
    kpsh==False时无效
  • 案例2:
    kpsh==True
    就是神奇发生的地方
    x[ind[i]]>x[ind]
    按元素检查对应于
    ind[i]
    的峰值是否大于迄今为止发现的任何其他峰值指数。如果是这种情况,则意味着它的高度不同(不需要检查直接相等,因为峰值只能更大)。如果它不是更大,那意味着有另一个同样高度的山峰。这会将
    arr\u mpd&arr\u kpsh
    上的元素覆盖为
    False
    。如果该元素在
    idel
    alraedy中也为false,则它将被保留,从而在
    kpsh=True
    时保持相同的高度

我希望这有帮助

是的,这非常有帮助,解决了我的疑问。非常感谢你!