在scipy.interpolate.griddata和method = nearest之外的边界外使用fill_value

时间:2017-01-09 09:33:01

标签: python numpy scipy interpolation qhull

功能scipy.interpolate.griddata允许指定文档说明的关键字fill_value

  

用于填充凸包外部请求点的值   输入点。如果未提供,则默认为nan。   此选项对“最近”方法无效。

但是,我需要指定fill_value在边界之外使用 使用method='nearest'和2D数据。如何实现这一目标?

1 个答案:

答案 0 :(得分:3)

通过以下解决方法可以相对轻松地实现这一目标:

  1. 使用method='nearest'
  2. 运行
  3. 再次使用method='linear'运行;这里的外部区域充满了np.nan
  4. 在结果为2的地方有NaN。将您想要的fill_value分配给结果1.
  5. 代码:

    import numpy as np
    from scipy.interpolate import griddata
    
    def func(x, y):
        return x*(1-x)*np.cos(4*np.pi*x) * np.sin(4*np.pi*y**2)**2
    
    grid_x, grid_y = np.mgrid[0:1:100j, 0:1:200j]
    
    points = np.random.rand(100, 2)
    values = func(points[:,0], points[:,1])
    
    grid_z0 = griddata(points, values, (grid_x, grid_y), method='nearest')
    grid_z1 = griddata(points, values, (grid_x, grid_y), method='linear')
    
    fill_value = 123  # Whatever you like
    grid_z0[np.isnan(grid_z1)] = fill_value
    

    一种不太特别的方法是明确计算凸包并使用它来分配填充值。这需要更多的努力,但可能会更快。