将边界外fill_value与scipy.interpolate.griddata和method=nearest一起使用



函数scipy.interpolate.griddata允许指定关键字fill_value,文档对此指出:

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

但是,我需要指定一个在边界外使用的fill_value,当 将method='nearest'与 2D 数据结合使用。如何实现这一点?

这可以通过以下解决方法相对容易地实现:

  1. method='nearest'一起运行
  2. method='linear'再次运行;这里外面的区域充满了np.nan
  3. 只要结果中有 2 的 NaN,就将所需的fill_value分配给 1 的结果。

法典:

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

一种不太临时的方法是显式计算凸包并使用它来分配填充值。这将需要更多的努力,但可能会运行得更快。

相关内容

  • 没有找到相关文章

最新更新