函数scipy.interpolate.griddata
允许指定关键字fill_value
,文档中说明如下:
用于替换输入点的凸壳外请求点的值。如果未提供,则默认为nan。 此选项对“nearest”方法无效。
然而,在使用二维数据和method='nearest'
时,我需要指定一个在边界之外使用的fill_value
。如何实现呢?
函数scipy.interpolate.griddata
允许指定关键字fill_value
,文档中说明如下:
用于替换输入点的凸壳外请求点的值。如果未提供,则默认为nan。 此选项对“nearest”方法无效。
然而,在使用二维数据和method='nearest'
时,我需要指定一个在边界之外使用的fill_value
。如何实现呢?
以下方法可以相对容易地实现:
method='nearest'
运行method='linear'
运行;这里外部区域会被填充为np.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
一种不那么临时的方法是明确计算凸包并将其用于分配填充值。这需要更多的努力,但可能运行更快。
method='nearest'
更长两倍的时间。我会看一下scipy.spatial.ConvexHull
,它可能会有用。 - Arcturus B