2015-09-25 208 views
0

我正在尋找一個基於Python的Kolmogorov-Zurbenko過濾器,它接收一個時間序列輸入,並根據窗口大小和迭代次數對其進行過濾,但沒有發現任何似乎可行的東西。有沒有人比我有更好的運氣?Python/Scipy Kolmogorov-Zurbenko過濾器?

謝謝!

回答

1

我剛剛查看了相同的問題。實際KZ過濾器是大熊貓很容易:

import pandas as pd 
def kz(series, window, iterations): 
    """KZ filter implementation 
    series is a pandas series 
    window is the filter window m in the units of the data (m = 2q+1) 
    iterations is the number of times the moving average is evaluated 
    """ 
    z = series.copy() 
    for i in range(iterations): 
     z = pd.rolling_mean(z, window=window, min_periods=1, center=True) 
    return z 

什麼不能輕易實現的,據我所知是Kologorov Zurbenko過濾器(KZA)的自適應版本。這至少需要一個rolling_mean方法,該方法允許在中心的左側和右側指定不同的窗口長度。在https://cran.r-project.org/web/packages/kza/index.html的C代碼看起來相當簡單直接,但它需要循環,因此如果直接在Python中實現,會很慢。