python中具有NaN值的二维插值

python中具有NaN值的二维插值,python,scipy,Python,Scipy,我有一个2d矩阵(1800*600),有许多NaN值。 我想进行一个2d插值,这在matlab中非常简单。 但是如果使用了scipy.interpolate.2d,则结果是一个NaN矩阵。我知道可以使用scipy.interpolate.griddata填充NaN值,但我不想实现NaN。我还可以使用哪些函数来执行二维插值?使用inter2d的解决方法是执行两个插值:一个是对填充数据(用任意值替换NaN)进行插值,另一个是跟踪未定义的区域。然后可以将NaN值重新分配给这些区域: import n

我有一个2d矩阵(1800*600),有许多NaN值。

我想进行一个2d插值,这在matlab中非常简单。
但是如果使用了
scipy.interpolate.2d
,则结果是一个
NaN
矩阵。我知道可以使用
scipy.interpolate.griddata
填充
NaN
值,但我不想实现
NaN
。我还可以使用哪些函数来执行二维插值?

使用
inter2d
的解决方法是执行两个插值:一个是对填充数据(用任意值替换NaN)进行插值,另一个是跟踪未定义的区域。然后可以将NaN值重新分配给这些区域:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline

from scipy.interpolate import interp2d

# Generate some test data:
x = np.linspace(-2, 2, 40)
y = np.linspace(-2, 2, 41)
xx, yy = np.meshgrid(x, y)

z = xx**2+yy**2
z[ xx**2+yy**2<1 ] = np.nan

# Interpolation functions:
nan_map = np.zeros_like( z )
nan_map[ np.isnan(z) ] = 1

filled_z = z.copy()
filled_z[ np.isnan(z) ] = 0

f = interp2d(x, y, filled_z, kind='linear')
f_nan = interp2d(x, y, nan_map, kind='linear')     

# Interpolation on new points:
xnew = np.linspace(-2, 2, 20)
ynew = np.linspace(-2, 2, 21)

z_new = f(xnew, ynew)
nan_new = f_nan( xnew, ynew )
z_new[ nan_new>0.5 ] = np.nan

plt.pcolor(xnew, ynew, z_new);
将numpy导入为np
将matplotlib.pyplot作为plt导入
%matplotlib内联
从scipy.interpole导入interp2d
#生成一些测试数据:
x=np.linspace(-2,2,40)
y=np.linspace(-2,2,41)
xx,yy=np.meshgrid(x,y)
z=xx**2+yy**2
z[xx**2+yy**20.5]=np.nan
plt.pcolor(xnew、ynew、z_-new);

使用NaN值调用inter2d实际上是未定义的行为。类似的功能(如缩放)也会发生同样的情况。也许可以试试蒙版阵列?