作为正弦函数的结果,我有一个带有数字序列(浮点数)的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.1
和max(list) = 2.3
- 但我的列表包含许多正负峰值。
我的列表将是:
[-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 :(得分: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))
或
找到两个解决方案here