The solution offered by fuglede很好,但是如果您的数据非常嘈杂(如图中所示),您将最终得到许多误导性的本地外部数据。我建议您使用scipy.signal.argrelextrema函数。argrelextrema有其自身的局限性,但它有一个很酷的特性,可以指定要比较的点数,有点像噪声过滤算法。例如:
import numpy as np
import matplotlib.pyplot as plt
import pandas as pd
from scipy.signal import argrelextrema
# Generate a noisy AR(1) sample
np.random.seed(0)
rs = np.random.randn(200)
xs = [0]
for r in rs:
xs.append(xs[-1]*0.9 + r)
df = pd.DataFrame(xs, columns=['data'])
n=5 # number of points to be checked before and after
# Find local peaks
df['min'] = df.iloc[argrelextrema(df.data.values, np.less_equal, order=n)[0]]['data']
df['max'] = df.iloc[argrelextrema(df.data.values, np.greater_equal, order=n)[0]]['data']
# Plot results
plt.scatter(df.index, df['min'], c='r')
plt.scatter(df.index, df['max'], c='g')
plt.plot(df.index, df['data'])
plt.show()
The solution offered by fuglede很好,但是如果您的数据非常嘈杂(如图中所示),您将最终得到许多误导性的本地外部数据。我建议您使用
scipy.signal.argrelextrema
函数。argrelextrema
有其自身的局限性,但它有一个很酷的特性,可以指定要比较的点数,有点像噪声过滤算法。例如:一些要点:
n
来过滤噪声点argrelextrema
返回元组,末尾的[0]
提取numpy
数组使用Numpy
或
使用熊猫
假设感兴趣的列被标记为
data
,一个解决方案是例如:
相关问题 更多 >
编程相关推荐