一連のデータに対して堅牢な移動スケール推定値を計算するための高速で効率的な方法を探しています。私は、通常 3 ~ 400k 要素の 1 次元配列を使用しています。最近まで、シミュレートされたデータ (壊滅的な外れ値なし) を扱っていましたが、優れた Bottleneck パッケージの move_std 関数が役に立ちました。ただし、ノイズの多いデータに移行したため、std の動作が適切ではなくなりました。
過去に、私は非常に単純なバイウェイト中間分散コードを要素ごとに使用して、動作の悪い分布の問題に対処しました。
def bwmv(data_array):
cent = np.median(data_array)
MAD = np.median(np.abs(data_array-cent))
u = (data_array-cent) / 9. / MAD
uu = u*u
I = np.asarray((uu <= 1.), dtype=int)
return np.sqrt(len(data_array) * np.sum((data_array-cent)**2 * (1.-uu)**4 * I)\
/(np.sum((1.-uu) * (1.-5*uu) * I)**2))
ただし、現在使用している配列は十分に大きいため、非常に遅くなります。そのような推定器を提供するパッケージを知っている人はいますか、またはこれに迅速かつ効率的な方法でアプローチする方法についての推奨事項はありますか?