2

LinearNDInterpolatorで目的の2D線形補間機能が得られません。次のコードは、4つのノットポイント(0,0)、(1,0)、(0,1)、(1,1)の間で補間を実行しようとしています。interp2dは期待される(線形補間された)結果を提供しますが、LinearNDInterpolatorは他のことを行っているため、理解できません。おそらく私はAPIを正しく使用していません。残念ながら、使用法に関する詳細なドキュメントが見つかりません。誰かが私を助けてくれるか、私に手紙を書くのに適切なフォーラム(mathoverflow?)を教えてもらえますか?

>>> f = interp2d([0,1,0,1], [0,0,1,1], [0,1,2,4])
>>> f(0.5,0.5)
array([ 1.75])
>>> g = LinearNDInterpolator([[0,0],[1,0],[0,1],[1,1]], [0,1,2,4])
>>> g(0.5,0.5)
array(2.0)
4

2 に答える 2

6

http://docs.scipy.org/doc/scipy/reference/generated/scipy.interpolate.LinearNDInterpolator.htmlから:

内挿は、入力データをQhull [R15]で三角形化し、各三角形で線形重心補間を実行することによって構築されます。

あなたの場合、選択された三角形は(0,0), (1,1)エッジを共有しているように見えます。(0.5, 0.5)はとの中間で(0,0)あるため(1,1)、補間された値はそれらの頂点の値の間にあるため、です(0+4)/2 = 2.0

于 2012-09-28T02:24:34.113 に答える
1

4つの入力ポイントは共円形であるため、基になるドロネー三角形分割はあいまいです。(0,0)から(1,1)までの「エッジ」、または(1,0)から(0,1)までの「もう一方の対角線」に沿ったエッジになってしまう可能性があります。

前者の場合、(0.5,0.5)の補間は2.0を生成し、後者の場合は1.5を生成します。どちらを取得するかを制御することはできません。

その制御が必要な場合は、次の2つのオプションがあります。

1)Delauney三角形分割によって返されるオブジェクトのように見えるオブジェクトを補間器に与えることにより、三角形分割を明示的に提供します。

2)コーナーの1つを中央に向かって「ナッジ」します。たとえば、(1,1)の代わりに(0.99999,0.99999)を使用します。これにより、ドロネー三角形分割が決定論的な結果に「強制」されます。(この場合、他の対角線上で(0,0)から(0.99999,0.99999)セグメントの使用を「強制」します。)

そして、FWIW、これら2つの可能な値(1.5と2.0)の平均が、双一次内挿を使用したときに観察したものであることは偶然ではないと思います。数学的にはそれは予想されることだと思います。

于 2016-02-25T14:08:35.680 に答える