3

関数では、ドキュメントに記載されてscipy.interpolate.griddataいるキーワードを指定できます。fill_value

入力ポイントの凸包の外側にある要求されたポイントを埋めるために使用される値。指定しない場合、デフォルトは nan です。 このオプションは、'nearest' メソッドには影響しません。

ただし、2D データでfill_value使用する場合は、境界の外側で使用するには を指定する必要があります。method='nearest'これはどのように達成できますか?

4

1 に答える 1

5

これは、次の回避策で比較的簡単に実現できます。

  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

あまりアドホックでないアプローチは、凸包を明示的に計算し、それを使用して塗りつぶし値を割り当てることです。これにはより多くの労力が必要ですが、実行速度が向上する可能性があります。

于 2017-01-09T14:45:10.387 に答える