具有“线性”和“立方”的 Scipy griddata 产生 nan

Jan*_* SE 4 python interpolation numpy scipy

以下代码应生成 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()
Run Code Online (Sandbox Code Playgroud)

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

Spg*_*tCd 5

您看到的区域比输入点大得多。这对于“最近”无关紧要,因为这总是将最近的值放在某个坐标上。但是 'linear' 和 'cubic' 不会外推,而是默认用 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.
Run Code Online (Sandbox Code Playgroud)

绘制时最好理解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()
Run Code Online (Sandbox Code Playgroud)