python - python中的低峰
问题描述
我有一列的值从 20 到 45,平均值为 35。我想用阈值识别上下峰值。我能够找到上峰,但找不到下峰。我试过下面的代码:
from scipy.signal import find_peaks
vector=Agitator['AGITATOR AMPS'].values
peaks, _ = find_peaks(vector, height=53)
plt.figure(figsize=(15,5))
plt.plot(vector)
plt.plot(peaks,vector[peaks],"o")
plt.show()
我该如何改进呢?
解决方案
find_peaks 只寻找局部最大值(而不是最小值)
您可以在数据的负数上使用 find peaks -> find_peaks(-vector)
Array = np.random.uniform(20,45,size=(50))
peaks, _ = find_peaks(Array, height=20)
peaks2, _ = find_peaks(-Array)
plt.plot(Array)
plt.plot(peaks,Array[peaks],"o")
plt.plot(peaks2,Array[peaks2],"o")
不过,使用负值的 height 参数似乎会造成复杂性。但是,如果您只是添加像 find_peaks(-vector+max(vector)) 这样的最大值,它应该可以正常工作:
Array = np.random.uniform(20,45,size=(50))
peaks, _ = find_peaks(Array, height=20)
peaks2, _ = find_peaks(-Array+45, height=20)
plt.plot(Array)
plt.plot(peaks,Array[peaks],"o")
plt.plot(peaks2,Array[peaks2],"o")
另外我认为你 53 岁的身高在 20 到 45 之间是错误的,因为 45-20 < 53。
推荐阅读
- android - android如何从RecyclerView扩展ListAdapter按位置获取项目
- java - ViewPager 数据未在初始应用加载时加载
- python - DJANGO 中已经存在错误,即使它在 HTML 中是独一无二的
- python-3.x - 如何在带有多个线程的 pandas df 上读写?
- robotframework - 如何向 Robot Framework HTML 报告添加新列
- docker - Whatsapp Business Api 在访问他们的 api 时出错
- amazon-web-services - AWS ElasticBeanstalk + cloudflare
- linux - 使用 ksh 查找命令的循环异常行为
- r - 按个人分组
- akka-cluster - 是否可以运行一个只有一个节点的 Akka 集群,同时使用 Akka Cluster Bootstrap 和 Config 中的 Discovery?