2

我有一个包含各种大小间隙的 numpy 数组。我想用线性插值填充尺寸 < N 的较小间隙。

换句话说:

N = 2

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

我想用 30.0 填充第三个(索引 2)条目。

我对算法方法持开放态度,但我的意图是创建一个数组,作为局部间隙大小的指标:

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

或差距太大:

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

有了它,我可以记录足够小的间隙索引并使用 interp1d 是否有一种经济、实用的方法来做到这一点?我知道如何使用 Advance-mark-advance-mark 循环来做到这一点。

谢谢,

伊莱

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 回答