【问题标题】:Scipy griddata with 'linear' and 'cubic' yields nan具有“线性”和“立方”的 Scipy 网格数据产生 nan
【发布时间】:2018-11-21 19:18:40
【问题描述】:

以下代码应生成网格数据。但如果我选择插值类型“立方”或“线性”,我会在 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()

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

【问题讨论】:

标签: python numpy scipy interpolation


【解决方案1】:

您查看的区域比您的输入点大得多。这对于“最近”无关紧要,因为这总是将最近的值放在某个坐标上。但是 '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.

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

【讨论】:

  • 感谢这个有用的答案!
  • plt 使用什么模块导入?
  • @SpghttCd 您能否解释一下如何访问插值点。说出grd_x[0],grid_y[2] 的值? griddata 返回一个二维数组,对我来说,它如何映射到 grid_x, grid_y 给出的插值点并不那么明显@
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多