2016-06-25 7 views
1

のドキュメントは、x引数に結びついたときに何が起こるかについては何も言及していません。scipy内のinterp1dがネクタイを処理する方法

from scipy.interpolate import interp1d 
temp = interp1d([0, 1, 1, 2], [1, 2, 3, 4]) 
temp(0.5) # 1.5 
temp(1) # 3.0 
temp(1.5) # 3.5 

が、これは補間器の設計によって保証されている:私の実験は、補間するとき、それはその正確なx値が要求されている右端の1を返し、最も近いものを使用していることを示唆していますか?

+0

質問をデフォルトの '線形'の種類に限定していますか? – hpaulj

+0

現時点では、私は線形アルゴリズムにしか興味がありませんが、将来のために代替案が役に立つかもしれないという行動について知っています。 – drhagen

答えて

1

interp1dは、scipy/interpolate/interpolate.pyで定義されています。デフォルトの「線形」の場合、2つの選択肢があります。

  # Check if we can delegate to numpy.interp (2x-10x faster). 
      if (not np.issubdtype(self.y.dtype, np.complexfloating) and 
       self.y.ndim == 1 and 
       not _do_extrapolate(fill_value)): 
       self._call = self.__class__._call_linear_np 
      else: 
       self._call = self.__class__._call_linear 

call_linear_npはありません:コードをコンパイル

np.interp(x_new, self.x, self.y) 

関数呼び出しを。ドキュメントでは、xpが増加すると予想されていますが、実際にはこれをチェックしていません。

def _call_linear(self, x_new): 

はすべてあなたが勉強することができるPythonのようです。

私が線形補間に期待しているものは何ですか?しかし、このコードは浮動小数点数で動作し、「正確な平等」は浮動小数点数で保証されていないことに注意してください。

1

いいえ、保証されません。

xに結びついているときの補間器の動作は定義されていないため、scipyのバージョン間で変更される可能性があります。 (また、補間の種類と、配列内のどこに結びつきがあるか)。