使用 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