1

ディメンション (時間 = 410、緯度 = 72、経度 = 144) の全球降水量データがあります。緯度を 180 度、経度を 360 度に補間したいと考えています (つまり、データを 2.5 度から 1 度に縮小します)。

Matlabでは、私は次のことを行っていました:

%LAT,LON,XI,YI are old and new meshgridded lat-lons
for t = 1:size(precip,1)
    newPrecip(t,:,:)=interp2(LON,LAT,squeeze(precip(t,:,:)),XI,YI);
end

Python では、、、および (basemap) 関数を試しinterp2dましmap_coordinatesinterpが、成功しませんでした。

を使用したコードを次に示しますmap_coordinates。これにより、結果を得るのに最も近づきました

new_indicies = np.mgrid[0:410, -89.5:89.5:180J, -179.5:179.5:360J]
newPrecip = ndimage.map_coordinates(precip, new_indicies, order=1)

新しいデータには必要なディメンション (410,180,360) がありますが、実際には補間されません。代わりに、新しく追加されたグリッド (元のデータの周り) を 0 の値で埋めます。

私はPythonを初めて使用します。この問題の解決策を得るために助けていただければ幸いです。

4

4 に答える 4

2

私は通常、 Basemapに付属の補間ルーチンを使用します。

import mpl_toolkits.basemap as mp
Zg = mp.interp(dataIN,lonIN,latIN,lonOUT,latOUT,
               checkbounds=False, masked=False, order=1)

ここで、lonIN と latIN は元のグリッドの 1D 経度緯度 (通常のグリッドを想定)、dataIn は元のデータの 2D 配列、lonOUT と latOUT は補間する 2D グリッド、Zg は新しいグリッドの出力です。 . 出力グリッドは、次を使用して作成できます。

x=np.arange(-180,180,1)
y=np.arange(-90,90,1)
lonOUT,latOUT=np.meshgrid(x,y)

お役に立てれば。乾杯、トロンド

于 2013-07-02T19:53:26.513 に答える
1

Trond のおかげで、自分が間違っていたことに気づきました。これが私のために働く最終的なコードです。他の方の参考になれば幸いです。Stackoverflow に投稿するのはこれが初めてで、クエリが迅速かつ正確に回答されたことを非常にうれしく思います。

#this code assumes a input data 'precip' of dimensions (410,72,144)
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.basemap import interp

LAT=np.arange(-89.5,90.5,1)
LON=np.arange(-179.5,180.5,1)
LON,LAT=np.meshgrid(LON,LAT)
lat=np.arange(-88.75,91.25,2.5)
lon=np.arange(-178.75,181.25,2.5)

newPrecip=np.zeros((410,180,360), dtype='float')
for i in range(410):
    newPrecip[i,:,:]=interp(np.squeeze(precip[i,:,:]),lon,lat,LON,LAT,order=1)

plt.figure(1)
plt.pcolor(lon,lat,precip.mean(axis=0))
plt.figure(2)
plt.pcolor(LON,LAT,newPrecip.mean(axis=0))
于 2013-07-03T17:35:42.117 に答える
1

私は調べますscipy.interpolategriddataが必要なようです。

于 2013-07-02T19:51:19.163 に答える