python 峰度,python 峰值
大蟒求极值点主要用到科学计算库。
1.首先可先选择一个函数或者拟合一个函数,这里选择拟合数据:np.polyfit
将熊猫作为pdimportmatplotlib导入。py绘图为pltimportnumpy为来自scipy导入信号#的NP滤波等
xxx=np.arange(0,1000)
yyy=np.sin(xxx*np.pi/180)
z1=np.polyfit(xxx,yyy,7) #用七次多项式拟合
p1=np.poly1d(z1) #多项式系数
打印(p1) #在屏幕上打印拟合多项式
yvals=p1(xxx)
plt.plot(xxx,yyy, * ,label=原始值)
plt.plot(xxx,yvals, r ,label=polyfit values )
plt.xlabel(x轴)
plt.ylabel(y轴)
plt .图例(位置=4)
plt.title(多拟合)
plt.show()
得到的图形是:
2.求波峰值,也就是极大值,得到:signal.find_peaks,官方文档:https://个文档。scipy。组织/文档/副本/引用/生成/副本。信号。寻找峰值。信号查找峰值。
scipy.signal.find_peaks(x,height=None,threshold=None,distance=None,prominence=None,width=None,wlen=None,rel_height=0.5,plateau_size=None)
参数:
x:序列。有峰值的信号。
高度:数字或多维数组或序列,可选。要求的峰高。数字、无、匹配x的数组或前者的2元素序列。第一个元素始终被解释为最小高度,第二个元素(如果提供)被解释为所需的最大高度。
阈值:数量或多维数组或序列,可选。所需的峰值阈值,到其相邻样本的垂直距离。数字、无、匹配x的数组或前者的2元素序列。第一个元素始终被解释为最小阈值,第二个元素(如果提供)被解释为最大阈值。
距离:数字,可选。相邻峰之间样品所需的最小水平距离(=1)。首先删除较小的峰,直到所有剩余的峰都满足条件。
突出:数字或数组或序列,可选。所需的峰值突出度。数字、无、匹配x的数组或前者的2元素序列。第一个元素总是被解释为最小的,而第二个元素,如果提供的话,被解释为最大的所需突出。
宽度:数字或多维数组或序列,可选。样品中所需的峰宽。数字、无、匹配x的数组或前者的2元素序列。第一个元素总是被解释为最小宽度,第二个元素(如果提供的话)被解释为所需的最大宽度。
wlen : int,可选。用于计算峰的突出度,因此仅在给出突出度或宽度参数时使用。参见高峰_突出中的参数wlen,了解其效果的完整描述。
rel_height : float,可选。用于计算峰宽,因此仅在给定宽度时使用。有关其效果的完整描述,请参阅峰值宽度中的参数相对高度.
plateau _ size:数字或多维数组或序列,可选。样品中峰的平顶所需尺寸。数字、无、匹配x的数组或前者的2元素序列。第一个元素始终被解释为最小,第二个元素(如果提供)被解释为所需的最大平台大小。
版本1.2.0中的新功能。
#极值
数字峰值3=信号。find _ peaks(y vals,distance=10) #distance表极大值点的距离至少大于等于10个水平单位
print(num_peak_3[0])print(峰的数目是str(len(num_peak_3[0])
plt.plot(xxx,yyy, * ,label=原始值)
plt.plot(xxx,yvals, r ,label=polyfit values )
plt.xlabel(x轴)
plt.ylabel(y轴)
plt .图例(位置=4)
ii在范围内的PLT。标题(多边形拟合)(len(num _ peak _ 3[0]):
plt.plot(num_peak_3[0][ii],yvals[num_peak_3[0][ii]], * ,markersize=10)
plt.show()
3.在可导的情形下,可以求导来求极值点,同时得到极大值和极小值点:np.polyder
yyyd=np.polyder(p1,1) #1表示一阶导
打印(yyyd)
此时:yyyd.r即可就得导数为0的点,可以与上述的极大值点对应比较
4.直接函数分别求极大值和极小值:signal.argrelextrema函数
打印(yvals[信号。argrelextrema(yvals,NP。更大))#极大值的y轴,伊瓦尔斯为要求极值的序列
打印(信号。argrelextrema(yvals,np.greater)) #极大值的x轴
peak _ ind=信号。argrelextrema(y vals,np.greater)[0] #极大值点,改为np.less即可得到极小值点
plt.plot(xxx,yyy, * ,label=原始值)
plt.plot(xxx,yvals, r ,label=polyfit values )
plt.xlabel(x轴)
plt.ylabel(y轴)
plt .图例(位置=4)
plt.title(多拟合)
PLT。plot(信号。argrelextrema(y vals,np.greater)[0],y vals[signal。argrelextrema(y vals,np.greater)], o ,markersize=10) #极大值点
PLT。plot(信号。argrelextrema(y vals,np.less)[0],y vals[signal。argrelextrema(y vals,np.less)]",markersize=10) #极小值点
plt.show()
## -结束-
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。