找到最接近峰值的最小值
Find Closest Minima to Peak
我正在使用 scipy.singal.find_peaks
来查找峰值和最小值:
import numpy as np
from scipy.signal import find_peaks
x=np.array([9.8,57.,53.,37.,24.,19.,16.,15.,13.,13.,12.,12.,11.,11.,11.,11.,11.,11.,10.,13.,13.,13.,15.,13.,12.,14.,15.,14.,51.,34.,24.,20.,24.,22.,18.,57.,63.,38.,27.,28.,31.,33.,94.,71.,48.,40.,43.,39.,31.,27.,22.,21.,20.,19.,18.,18.,19.,20.,20.,49.,62.,48.,43.,34.,33.,28.,26.,26.,24.,23.,23.,26.,27.,70.,97.,57.,46.,68.,82.,59.,49.,37.,40.,45.,36.,33.,28.,22.,23.,284.,524.,169.,111.,148.,98.,68.,50.,38.,30.,28.])
peaks, _ = find_peaks(x)
mins, _ =find_peaks(x*-1)
看起来像:
现在我有兴趣找到最接近每个峰的最小值。所以我可以区分它们。
查看 find_peaks
文档后,参数 peak_prominece
似乎正是我要找的。
prominences = peak_prominences(x, peaks)[0]
contour_heights = x[peaks] - prominences
然后看起来像:
检查后,peak_prominences
找到了峰值之前的最小值。对于我的应用程序,我想要最近的峰值,无论它是在前面还是在后面。
如何使用 mins
为 peak_prominence
计算定义参数 wlen
。?
由于mins
包含最小值的索引,我如何使用它来定义wlen
?我基本上必须在最小值中找到限制每个峰值的索引(即 peaks[i]
)。
是否有更好的方法仅使用 mins
和 peaks
来实现此目的?
Now I am interested to find the closest minima to each peak. So I can take the difference between them.
以下是您要找的吗?
closest_mins = [mins[np.argmin(np.abs(x-mins))] for x in peaks]
difference = x[peaks]-x[closest_mins]
print(difference)
[ 47. 3. 1. 37. 4. 45. 54. 3. 44. 51. 36. 8. 413. 37.]
下面是 peaks
、mins
和 peaks
-最近的 mins
对的图,用虚线表示。请注意,有 mins
最接近多个 peaks
.
plt.plot(x)
plt.plot(peaks, x[peaks],'o', label = 'peaks')
plt.plot(mins, x[mins],'s', label = 'mins')
plt.plot(closest_mins, x[closest_mins],'*', label = 'closest mins')
for p, m in zip(peaks, closest_mins):
plt.plot([p,m], [x[p], x[m]], 'k', dashes = (4,1))
plt.legend();
我正在使用 scipy.singal.find_peaks
来查找峰值和最小值:
import numpy as np
from scipy.signal import find_peaks
x=np.array([9.8,57.,53.,37.,24.,19.,16.,15.,13.,13.,12.,12.,11.,11.,11.,11.,11.,11.,10.,13.,13.,13.,15.,13.,12.,14.,15.,14.,51.,34.,24.,20.,24.,22.,18.,57.,63.,38.,27.,28.,31.,33.,94.,71.,48.,40.,43.,39.,31.,27.,22.,21.,20.,19.,18.,18.,19.,20.,20.,49.,62.,48.,43.,34.,33.,28.,26.,26.,24.,23.,23.,26.,27.,70.,97.,57.,46.,68.,82.,59.,49.,37.,40.,45.,36.,33.,28.,22.,23.,284.,524.,169.,111.,148.,98.,68.,50.,38.,30.,28.])
peaks, _ = find_peaks(x)
mins, _ =find_peaks(x*-1)
看起来像:
现在我有兴趣找到最接近每个峰的最小值。所以我可以区分它们。
查看 find_peaks
文档后,参数 peak_prominece
似乎正是我要找的。
prominences = peak_prominences(x, peaks)[0]
contour_heights = x[peaks] - prominences
然后看起来像:
检查后,peak_prominences
找到了峰值之前的最小值。对于我的应用程序,我想要最近的峰值,无论它是在前面还是在后面。
如何使用 mins
为 peak_prominence
计算定义参数 wlen
。?
由于mins
包含最小值的索引,我如何使用它来定义wlen
?我基本上必须在最小值中找到限制每个峰值的索引(即 peaks[i]
)。
是否有更好的方法仅使用 mins
和 peaks
来实现此目的?
Now I am interested to find the closest minima to each peak. So I can take the difference between them.
以下是您要找的吗?
closest_mins = [mins[np.argmin(np.abs(x-mins))] for x in peaks]
difference = x[peaks]-x[closest_mins]
print(difference)
[ 47. 3. 1. 37. 4. 45. 54. 3. 44. 51. 36. 8. 413. 37.]
下面是 peaks
、mins
和 peaks
-最近的 mins
对的图,用虚线表示。请注意,有 mins
最接近多个 peaks
.
plt.plot(x)
plt.plot(peaks, x[peaks],'o', label = 'peaks')
plt.plot(mins, x[mins],'s', label = 'mins')
plt.plot(closest_mins, x[closest_mins],'*', label = 'closest mins')
for p, m in zip(peaks, closest_mins):
plt.plot([p,m], [x[p], x[m]], 'k', dashes = (4,1))
plt.legend();