用python查找正弦数值系列的峰值

时间:2017-07-19 07:42:01

标签: python list max min

作为正弦函数的结果,我有一个带有数字序列(浮点数)的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, ...]

是否有我不了解的功能?

2 个答案:

答案 0 :(得分: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]

请注意,当前组的峰值/谷值始终在下一组中开始。

答案 1 :(得分: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