擅长:python、mysql、java
<p>这里有一个用熊猫做移动平均线的解决方案。首先<code>unwrap</code>数据(需要转换成弧度和弧度),因此没有间断(例如,从180跳到-179)。然后计算移动平均值,最后根据需要转换回包装数据。另外,请使用<code>np.convolve()</code>查看这个<a href="http://scipy-cookbook.readthedocs.org/items/SignalSmooth.html" rel="nofollow">numpy cookbook recipe</a>。在</p>
<pre><code>import numpy as np
import pandas as pd
# generate random data
X = pd.Series([(x + 5*np.random.random())%360 for x in range(-100, 600, 15)])
Y = pd.Series([(y + 5*np.random.random())%360 - 180 for y in range(-200, 500, 15)])
# 'unwrap' the angles so there is no wrap around
X1 = pd.Series(np.rad2deg(np.unwrap(np.deg2rad(Y))))
Y1 = pd.Series(np.rad2deg(np.unwrap(np.deg2rad(Y))))
# smooth the data with a moving average
# note: this is pandas 17.1, the api changed for version 18
X2 = pd.rolling_mean(X1, window=3)
Y2 = pd.rolling_mean(Y1, window=3)
# convert back to wrapped data if desired
X3 = X2 % 360
Y3 = (Y2 + 180)%360 - 180
</code></pre>