我想使用scipy.signal.find_peaks在某些2D数据中查找峰,但是该函数默认忽略所有边缘峰(峰出现在阵列的左边界或右边界)。有没有办法在结果中包括边缘峰?
例如,我想要以下代码:
find_peaks([5,4,3,3,2,3])
生产
[0,5]
但它产生
[]
答案 0 :(得分:0)
根据find_peaks
的更详细用法,我建议在数组的开头和结尾重复数据:例如
peak_info = find_peaks([4,5,4,3,3,2,3,2])
# correct for additional initial element in auxiliary input array
peaks = peak_info[0] - 1
例如,如果设置了width
的最低要求峰find_peaks
参数,则甚至有可能在开头和结尾重复反向数组。
find_peaks
通常仅在和左侧都具有较低数据值的情况下才识别峰。因此,它也不会标识[5,5,4,3,3,2,3,3]
中的任何峰值(即分别重复第一个和最后一个数组元素)。在数组的开头和结尾重复第二个和最后一个元素,或者在开头和结尾插入较低的值将可以将边界点识别为峰。
答案 1 :(得分:0)
findpeaks
库可以检测边缘。
pip安装findpeaks
示例:
X = [5,4,3,2,1,2,3,3,2,3,2,4,5,6]
# initialize with smoothing parameter
fp = findpeaks(lookahead=1, interpolate=5)
# fit
results=fp.fit(X)
# Plot
fp.plot()
# Print the xy coordinates.
# The first and last one in the array are the edges.
print(results['df'])
# x y labx valley peak labx_topology valley_topology peak_topology
# 0 5 1.0 True False 1.0 True True
# 1 4 1.0 False False 1.0 False False
# 2 3 1.0 False False 1.0 False False
# 3 2 1.0 False False 1.0 False False
# 4 1 1.0 True False 1.0 True False
# 5 2 2.0 False False 2.0 False False
# 6 3 2.0 False True 2.0 False True
# 7 3 2.0 False False 2.0 False False
# 8 2 2.0 True False 2.0 True False
# 9 3 3.0 False True 3.0 False True
# 10 2 3.0 True False 3.0 True False
# 11 4 4.0 False False 4.0 False False
# 12 5 4.0 True False 4.0 True False
# 13 6 4.0 False False 4.0 False True