2

線形に補間および推定したい 3D データセットがあります。補間は で簡単に行うことができますscipy.interpolate.LinearNDInterpolator。モジュールは、パラメーター範囲外の値に対してのみ定数/nan を入力できますが、外挿をオンにするオプションを提供しない理由がわかりません。

コードを見ると、モジュールが cython で書かれていることがわかります。cython の経験がないため、コードをいじって外挿を実装するのは困難です。私はそれを純粋な python コードで書くことができますが、おそらく他の誰かがより良いアイデアを持っていますか? 私の特定のケースには一定の xy グリッドが含まれますが、z 値は大きく (-100,000) 変化し続けるため、z 値が変化するたびに補間が実行されるため、補間は高速でなければなりません。

要求に応じて基本的な例を挙げると、次のようなグリッドがあるとしましょう

xyPairs = [[-1.0, 0.0], [-1.0, 4.0],
           [-0.5, 0.0], [-0.5, 4.0],
           [-0.3, 0.0], [-0.3, 4.0],
           [+0.0, 0.0], [+0.0, 4.0],
           [+0.2, 0.0], [+0.2, 4.0]]

と の値を計算したいとしましょx = -1.5, -0.8, +0.5y = -0.2, +0.2, +0.5。現在、各 y 値の x 軸に沿って、次に各 x 値の y 軸に沿って 1d 内挿/外挿を実行しています。外挿は の 2 番目の関数によって行われryggyr's answerます。

4

3 に答える 3

4

最も近い補間と線形補間の組み合わせを使用します。LinearNDInterpolator は、補間に失敗した場合は np.nan を返します。それ以外の場合は、配列 size(1) を返します。 NearestNDInterpolator は float を返します。

import scipy.interpolate
import numpy
class LinearNDInterpolatorExt(object):
  def __init__(self, points,values):
    self.funcinterp=scipy.interpolate.LinearNDInterpolator(points,values)
    self.funcnearest=scipy.interpolate.NearestNDInterpolator(points,values)
  def __call__(self,*args):
    t=self.funcinterp(*args)
    if not numpy.isnan(t):
      return t.item(0)
    else:
      return self.funcnearest(*args)
于 2018-02-12T23:54:17.737 に答える