5

私は同僚のIDLコードをPythonに書き直している最中であり、混乱しているいくつかの違いを考え出しています。他のSOの質問とメーリングリストのスレッドによると、双一次補間を行うことになっているものを使用scipy.ndimage.interpolation.map_coordinatesして指定すると、私は見つけました。order=1IDLコード(GDLで実行)とPython(map_coordinates)の結果を比較すると、異なる結果が得られました。次に使用mpl_toolkits.basemap.interpしてみたところ、IDLコードと同じ結果が得られました。以下は、何が悪いのかを示す簡単な例です。誰かが私が間違っていることmap_coordinatesorder=1双線形ではないことを理解するのを手伝ってもらえますか?

from scipy.ndimage.interpolation import map_coordinates
from mpl_toolkits.basemap import interp
import numpy

in_data = numpy.array([[ 25.89125824,  25.88840675],[ 25.90930748,  25.90640068]], dtype=numpy.float32)

map_coordinates(in_data, [[0.0],[0.125]], order=1, mode='nearest')
# map_coordinates results in "25.89090157"
interp(in_data, numpy.array([0,1]), numpy.array([0,1]), numpy.array([0.0]), numpy.array([0.125]), order=1)
# interp results in "25.89351439", same as GDL's "25.8935" when printed

私はを使用して完全に元気ですが、なぜ同じ結果が返されないのinterpか興味がありました。map_coordinatesドキュメントにバイリニアについて言及されていないことに気づきましたが、map_coordinates実際にはバイリニアですか?私は何が欠けていますか?

4

1 に答える 1

7

を使用する場合map_coordinatesは、配列の形状が であるため、配列を転置するか、座標を (y, x) 形式に変更する必要があります(height, width)

from scipy.ndimage.interpolation import map_coordinates
from mpl_toolkits.basemap import interp
import numpy

in_data = numpy.array([[ 25.89125824,  25.88840675],[ 25.90930748,  25.90640068]], dtype=numpy.float32)

print map_coordinates(in_data.T, [[0.0],[0.125]], order=1, mode='nearest')
print interp(in_data, numpy.array([0,1]), numpy.array([0,1]), numpy.array([0.0]), numpy.array([0.125]), order=1)

これは出力されます:

[ 25.89351463]
[ 25.89351439]
于 2013-02-25T01:09:04.757 に答える