识别1D numpy数组中的间隙大小

时间:2013-05-03 23:43:58

标签: python functional-programming interpolation

我有一个包含各种尺寸间隙的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循环来实现它。

谢谢,

1 个答案:

答案 0 :(得分: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]