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