Numpy: NaNをリニアインターポレーションして置き換える
def interp_nan(x): ''' Replace nan by interporation http://stackoverflow.com/questions/6518811/interpolate-nan-values-in-a-numpy-array ''' ok = -np.isnan(x) xp = ok.nonzero()[0] fp = x[ok] _x = np.isnan(x).nonzero()[0] x[-ok] = np.interp(_x, xp, fp) return x
Site-packagesに入れていつでもインポートできるようにしておくと便利なスニペット。もともとはStackoverflowで見つけたものほぼそのまま。ravelが何で入れてあるのかコメントで突っ込まれていて、確かになくとも動くのでとっておいた。
いつもと違うPCなんかでコーディングするときのための覚書。Pygmentsにもあげておいた。
使用例
>>> toy = np.array([np.nan, 1, np.nan, 3, np.nan, 9, np.nan, 2, np.nan]) >>> interp_nan(toy) 0: array([ 1. , 1. , 2. , 3. , 6. , 9. , 5.5, 2. , 2. ])