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
s的数组。由于使用True
和
执行按位\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
alraedy中也为false,则它将被保留,从而在idel
时保持相同的高度kpsh=True
我希望这有帮助是的,这非常有帮助,解决了我的疑问。非常感谢你!