2017-07-19 28 views
0

作爲正弦函數的結果,我有一個帶有數字序列(浮點數)的python列表。用Python搜索正弦數列的峯值

例如:

[0.3, 0.7, 0.9, 1.0, 1.1, 1.0, 0.8, 0.4, 0.1, -0.2, -0.7, -1.4, -2.1, -1.1, -0.2, 0.5, 0.9, 1.6, 2.3, 2.2, 1.4, ...] 

我瞭解的功能min(list)max(list),但是這會給我只有一個分和一個最高值 - 以上min(list) = -2.1max(list) = 2.3 - 但我的列表中的示例包含許多積極和消極峯。

另一個簡單的例子: Sinus function

我的目錄將被:

[-1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, 0.0, -1.0, 0.0, 1.0, ...] 

結果應該然後是以下兩個列表:

l_min = [-1.0, -1.0, -1.0, ...] 
l_max = [0.0, 0.0, 0.0, ...] 

是否有一個功能我不不知道?

+0

相關:https://stackoverflow.com/help/someone-answers –

回答

1

這可以使用itertools.groupby完成。你需要首先壓縮連續的值。這是我正在處理的內容:

In [177]: x = [0.3, 0.7, 0.9, 1.0, 1.1, 1.0, 0.8, 0.4, 0.1, -0.2, -0.7, -1.4, -2.1, -1.1, -0.2, 0.5, 0.9, 1.6, 2.3, 2.2, 1.4] 

然後,您將壓縮數據,以便處理相鄰值的元組。由鍵基團,其中所述第一值大於較小或等於所述第二值:

In [180]: for _, v in itertools.groupby(zip(x[:-1], x[1:]), lambda x: x[0] <= x[1]): 
    ...:  print([x[0] for x in v]) 
    ...:  
    ...:  
[0.3, 0.7, 0.9, 1.0] 
[1.1, 1.0, 0.8, 0.4, 0.1, -0.2, -0.7, -1.4] 
[-2.1, -1.1, -0.2, 0.5, 0.9, 1.6] 
[2.3, 2.2] 

注意,電流團的峯/谷總是開始下一個組中使用。

0
import numpy as np 
from scipy.signal import find_peaks_cwt 
cb = np.array([-0.010223, ... ]) 
indexes = find_peaks_cwt(cb, np.arange(1, 550)) 

peakdetect

發現兩種解決方案here