2011-07-25 9 views
23

Numpyで1Dアレイのローリングウィンドウを効率的に実装する方法はありますか?Numpyの1Dアレイのローリングウィンドウ?

stdev = [] 
for i, data in enumerate(observations[n-1:]): 
    strip = observations[i:i+n] 
    mean = sum(strip)/n 
    stdev.append(sqrt(250*sum([(s-mean)**2 for s in strip])/(n-1))) 

例えば、私はobservations、値の1次元リストであり、nは、標準偏差のウィンドウ長さ1Dリスト、ローリング標準偏差を計算するために、この純粋なPythonコードスニペットを有します

これをNumpy内で完全に実行する方法はありますか?つまり、Pythonループを使用しないでください。標準偏差はnumpy.stdでは些細なものですが、ローリングウィンドウの部分は完全に私を傷つけます。

Numpyのローリングウィンドウに関するブログポストthisが見つかりましたが、1Dアレイのようではありません。

+0

ます。また、[ボトルネックプロジェクト](https://github.com/kwgoodman/を見てみることができますボトルネック)、移動平均、標準などが組み込まれています – derchambers

答えて

36

ブログコードを使用するだけで、結果に機能を適用できます。

あなたは(ブログから)持って
numpy.std(rolling_window(observations, n), 1) 

すなわち:

def rolling_window(a, window): 
    shape = a.shape[:-1] + (a.shape[-1] - window + 1, window) 
    strides = a.strides + (a.strides[-1],) 
    return np.lib.stride_tricks.as_strided(a, shape=shape, strides=strides) 
+0

任意のデータ型に対して有効ですか? – Lee

関連する問題