我有一个2D数组和一些NaN值。我想用我有数据的位置来修复(插值)这些值。这个数组看起来像下面的那个。在
如果可能的话,我想做插值,这样当我离开非NaN值时,我会越来越接近值0。在
我该怎么做?在
我读过gridddata,但它似乎是为处理非结构化的N维数据而设计的。我也读了other threads中的答案,但我认为他们的出发点是不同的。在
array([[ nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan],
[ nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan],
[ 1. , 0. , 1. , 0. , 0.25 ,
nan, 0. , nan, nan, nan],
[ nan, 0. , nan, 0.25 , 0.66666667,
0.25 , 0.66666667, 0. , 1. , nan],
[ 0. , 0.5 , 0.66666667, 0.8 , 0.66666667,
0.8 , 0.5 , 0.83333333, nan, nan],
[ 0.625 , 0.5625 , 0.9 , 0.8 , 0.8 ,
0.83333333, 0.57142857, 0.66666667, 0.5 , nan],
[ nan, 1. , 0.71428571, 0.85714286, 1. ,
1. , 1. , nan, nan, nan],
[ nan, nan, nan, nan, 1. ,
1. , nan, nan, nan, nan]])
有几十种可能的方法,基于什么样的插值技术,你想使用。事实上,由于你的数据被nan包围着,我宁愿把它看作是一个函数平滑,然后插值。如果你想更接近于零,在你的二维地图上,你离非南岛越远,我建议你这样做:
X[i,j]
视为以[i,j]
为中心的高斯分布,方差为1,按其pdf( [i,j] ) = X[i,j]
缩放,因此f_ij( [a,b] ) = X[i,j] * exp( -|| [a,b] - [i,j] ||^2/2 )
。在X[a,b]
集X[a,b] = sum( f_ij( [a,b] ) )
,其中对非NaN数据点的所有[i,j]
索引执行求和结果你得到了一个类似“密度估计”的结果,通过改变方差(我建议使用=1),你可以修改“消失速度”值。在
所以代码只会在所有nan上循环一次,对于每个nan,您将遍历所有非nan并求出gaussian值的总和。在
会是这样的:
相关问题 更多 >
编程相关推荐