5

私は同僚のIDLコードをPythonに書き直しているところですが、混乱しているいくつかの相違点があります。あなたがscipy.ndimage.interpolation.map_coordinatesを使用し、order=1を指定すると、双線形補間を行うと思われる他のSOの質問とメーリングリストのスレッドによると、 IDLコード(GDLで実行)とpython(map_coordinates)の結果を比較すると、私は異なる結果を得ました。それから私はmpl_toolkits.basemap.interpを使ってみました。私はIDLコードと同じ結果を得ました。以下は、何が間違っているかを示す簡単な例です。誰かが、私がmap_coordinatesで間違っていることを理解するのに役立つかもしれませんか、またはorder=1は双線形ではありませんか?Scipy map_coordinates双線形補間とinterpおよびIDL補間との比較

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のドキュメントにはbilinearについて言及していないことに気付きました。実際には双線形ですか?私は何が欠けていますか?

答えて

7

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

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] 
+0

うわー、私はそのことを考えていなかったと信じてすることはできません。私はそれを試したと思った、ありがとうございました。 – daveydave400

関連する問題