2

さまざまなサイズのギャップを含む numpy 配列があります。サイズ < N の小さなギャップを線形補間で埋めたいと思います。

つまり、次の場合です。

N = 2

x = np.array([10., 20., np.nan, 40., 50., np.nan, np.nan, np.nan, 10.,0.,-10.])

3 番目 (インデックス 2) のエントリに 30.0 を入力したいと思います。

私はアルゴリズムのアプローチにオープンですが、私の意図は、ローカルギャップのサイズの指標となる配列を作成することでした:

[0 0 1 0 0 3 3 3 0 0]  

またはギャップが大きすぎる:

[0 0 0 0 0 1 1 1 0 0]

それを手にして、十分に小さいギャップのインデックスを記録し、interp1d を使用できます。これを行うための経済的で機能的な方法はありますか? 事前マーク - 事前マーク ループでそれを行う方法を知っています。

ありがとう、

エリ

4

1 に答える 1

0

これがまさにあなたが探しているものかどうかはわかりませんが、これが私の提案です:

>>> import numpy as np
>>> from itertools import groupby
>>>
>>> x = np.array([10., 20., np.nan, 40., 50., np.nan, np.nan, np.nan, 10.,0.,-10.])
>>> y = np.zeros_like(x, dtype=int)
>>> y[np.where(np.isnan(x))] = 1 # Locate where the array is nan
>>> y
array([0, 0, 1, 0, 0, 1, 1, 1, 0, 0, 0])
>>> z = []
>>> for a, b in groupby(y, lambda x: x == 0):
...     if a: # Where the value is 0, simply append to the list
...         z.extend(list(b))
...     else: # Where the value is one, replace 1 with the number of sequential 1's
...         l = len(list(b))
...         z.extend([l]*l)
>>> z
[0, 0, 1, 0, 0, 3, 3, 3, 0, 0, 0]
于 2013-05-04T06:48:45.370 に答える