使用 scipy.signal 的 argrelextrema 函数(API),简单方便
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
import numpy as np
import pylab as pl
import matplotlib.pyplot as plt
import scipy.signal as signal
x = np.array([
0 , 6 , 25 , 20 , 15 , 8 , 15 , 6 , 0 , 6 , 0 , - 5 , - 15 , - 3 , 4 , 10 , 8 , 13 , 8 , 10 , 3 ,
1 , 20 , 7 , 3 , 0 ])
plt.figure(figsize = ( 16 , 4 ))
plt.plot(np.arange( len (x)),x)
print x[signal.argrelextrema(x, np.greater)]
print signal.argrelextrema(x, np.greater)
plt.plot(signal.argrelextrema(x,np.greater)[ 0 ],x[signal.argrelextrema(x, np.greater)], 'o' )
plt.plot(signal.argrelextrema( - x,np.greater)[ 0 ],x[signal.argrelextrema( - x, np.greater)], '+' )
# plt.plot(peakutils.index(-x),x[peakutils.index(-x)],'*')
plt.show()
|
1
2
|
[ 25 15 6 10 13 10 20 ]
(array([ 2 , 6 , 9 , 15 , 17 , 19 , 22 ]),)
|
但是存在一个问题,在极值有左右相同点的时候无法识别,但是个人认为在实际的使用过程中极少会出现这种情况,所以可以忽略。
1
2
3
4
5
6
7
8
9
10
11
|
x = np.array([
0 , 15 , 15 , 15 , 15 , 8 , 15 , 6 , 0 , 6 , 0 , - 5 , - 15 , - 3 , 4 , 10 , 8 , 13 , 8 , 10 , 3 ,
1 , 20 , 7 , 3 , 0 ])
plt.figure(figsize = ( 16 , 4 ))
plt.plot(np.arange( len (x)),x)
print x[signal.argrelextrema(x, np.greater)]
print signal.argrelextrema(x, np.greater)
plt.plot(signal.argrelextrema(x,np.greater)[ 0 ],x[signal.argrelextrema(x, np.greater)], 'o' )
plt.plot(signal.argrelextrema(x,np.less)[ 0 ],x[signal.argrelextrema(x, np.less)], '+' )
plt.show()
|
1
2
|
[ 15 6 10 13 10 20 ]
(array([ 6 , 9 , 15 , 17 , 19 , 22 ]),)
|
以上这篇python 寻找离散序列极值点的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/weijifen000/article/details/80070520