<p>IIUC公司:</p>
<pre><code>In [89]: from scipy.signal import argrelextrema
In [90]: a = np.array([1,2,3,4,5,6,8,9,10,9,7,6,5.50,5,6,7,8,10,12,15,14 ,13.50, 12])
In [91]: idx = np.sort(np.concatenate((argrelextrema(a, np.greater)[0], argrelextrema(a, np.less)[0])))
In [92]: np.split(a, idx)
Out[92]:
[array([1., 2., 3., 4., 5., 6., 8., 9.]),
array([10. , 9. , 7. , 6. , 5.5]),
array([ 5., 6., 7., 8., 10., 12.]),
array([15. , 14. , 13.5, 12. ])]
</code></pre>
<p>或者</p>
<pre><code>In [93]: np.split(a, idx+1)
Out[93]:
[array([ 1., 2., 3., 4., 5., 6., 8., 9., 10.]),
array([9. , 7. , 6. , 5.5, 5. ]),
array([ 6., 7., 8., 10., 12., 15.]),
array([14. , 13.5, 12. ])]
</code></pre>
<p>兴趣点:</p>
<pre><code>In [97]: np.concatenate((a[[0]], a[idx], a[[-1]]))
Out[97]: array([ 1., 10., 5., 15., 12.])
</code></pre>
<p><strong>更新:</strong></p>
<pre><code>In [129]: df = pd.DataFrame({'Value':Values,
'Date':pd.date_range('2018-01-01', periods=len(Values))})
In [130]: df
Out[130]:
Date Value
0 2018-01-01 1.0
1 2018-01-02 2.0
2 2018-01-03 3.0
3 2018-01-04 4.0
4 2018-01-05 5.0
.. ... ...
18 2018-01-19 12.0
19 2018-01-20 15.0
20 2018-01-21 14.0
21 2018-01-22 13.5
22 2018-01-23 12.0
[23 rows x 2 columns]
In [131]: idx = np.sort(np.concatenate((argrelextrema(df['Value'].values, np.greater)[0],
argrelextrema(df['Value'].values, np.less)[0])))
In [132]: idx
Out[132]: array([ 8, 13, 19], dtype=int64)
In [133]: df.iloc[idx]
Out[133]:
Date Value
8 2018-01-09 10.0
13 2018-01-14 5.0
19 2018-01-20 15.0
In [134]: poi = np.concatenate(([0], idx, [len(df)-1]))
In [135]: df.iloc[poi]
Out[135]:
Date Value
0 2018-01-01 1.0
8 2018-01-09 10.0
13 2018-01-14 5.0
19 2018-01-20 15.0
22 2018-01-23 12.0
</code></pre>