Scipy griddata with' linear'和'立方体'产量为nan

时间:2018-06-12 11:45:30

标签: python numpy scipy interpolation

以下代码应该生成griddata。但是如果我选择插值类型'立方体'或者'线性'我在z网格中得到了一些东西。我选择最近的'一切都很好。 这是一个示例代码:

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()

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

1 个答案:

答案 0 :(得分:2)

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

另见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绘制时最容易理解:

enter image description here

创建的剧情:

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()