Python 带有';线性';和';立方';纳南

Python 带有';线性';和';立方';纳南,python,numpy,scipy,interpolation,Python,Numpy,Scipy,Interpolation,下面的代码应该生成griddata。但如果我选择插值类型“立方”或“线性”,我会得到z网格中的nan。我选择“最近的”,一切都很好。 下面是一个示例代码: import numpy as np from scipy.interpolate import griddata x = np.array([0.03,0.05,0033]) y = np.array([0.004,0.01,0.02]) z = np.array([1,2,3]) xy = np.zeros((2,np.size(x

下面的代码应该生成griddata。但如果我选择插值类型“立方”或“线性”,我会得到z网格中的nan。我选择“最近的”,一切都很好。 下面是一个示例代码:

import numpy as np
from scipy.interpolate import griddata

x = np.array([0.03,0.05,0033])
y = np.array([0.004,0.01,0.02])
z = np.array([1,2,3])


xy = np.zeros((2,np.size(x)))
xy[0] = x
xy[1] = y
xy = xy.T

grid_x, grid_y = np.mgrid[0.0:0.09:250*1j, 0.0:0.03:250*1j] #generating the grid


i_type= 'cubic' #nearest, linear, cubic
grid_z = griddata(xy, z, (grid_x, grid_y), method=i_type)

#check if there is a nan in the z grid:
print np.isnan(grid_z).any()

我不知道为什么这不起作用。

您查看的区域比您的输入点大得多。这与“最近的”无关,因为它总是将最近的值放在某个坐标上。但是“线性”和“立方”不是外推,而是默认情况下用nan填充不在输入区域内的值

另请参见
griddata
的文档:

fill_value : float, optional
Value used to fill in for requested points outside of the convex hull of the input points. If not provided, then the default is nan. This option has no effect for the ‘nearest’ method.
通过
imshow
绘制时最容易理解:

使用以下命令创建的绘图:

import numpy as np
from scipy.interpolate import griddata

x = np.array([0.03,0.05,0.033])
y = np.array([0.004,0.01,0.02])
z = np.array([1,2,3])


xy = np.zeros((2,np.size(x)))
xy[0] = x
xy[1] = y
xy = xy.T

grid_x, grid_y = np.mgrid[0.0:0.09:250*1j, 0.0:0.03:250*1j] #generating the grid

fig, axs = plt.subplots(3)
for i, i_type in enumerate(['cubic', 'nearest', 'linear']): #, cubic
    grid_z = griddata(xy, z, (grid_x, grid_y), method=i_type)

    #check if there is a nan in the z grid:
    axs[i].imshow(grid_z)
    axs[i].set_title(i_type)

plt.tight_layout()

可能重复感谢这个有用的答案!