これは、次の回避策で比較的簡単に実現できます。
- で実行
method='nearest'
method='linear'
;で再度実行します。ここでは、外側の領域が で満たされていnp.nan
ます。
- 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
あまりアドホックでないアプローチは、凸包を明示的に計算し、それを使用して塗りつぶし値を割り当てることです。これにはより多くの労力が必要ですが、実行速度が向上する可能性があります。