2013-07-02 4 views
1

차원 (시간 = 410, lat = 72, lon = 144)이있는 글로벌 강수량 데이터가 있습니다. 위도를 180도에서 360도까지 보간하고 싶습니다 (즉, 2.5도에서 1도까지 데이터 크기를 줄임). 파이썬 2 차원 보간

는 매트랩 내가 할하는 데 사용 : 나는 interp2d, map_coordinatesinterp (베이스 맵) 기능을 시도 파이썬에서

%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 

하지만 성공하지. 대신 그냥 채우고,

는 여기에 내가 (410,180,360)을 원하는 크기가 않는 결과를

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) 

새로운 데이터를 가져 오는 가장 가까운 저를 얻었다 map_coordinates 내 코드,하지만 실제로는 보간하지 않습니다 0 값을 가진 새로 추가 된 격자 (원본 데이터 주변).

저는 파이썬에 초보자입니다.이 문제에 대한 해결책을 얻는 데 도움이 되었으면합니다.

답변

1

일반적으로 Basemap과 함께 제공되는 보간 루틴을 사용합니다. 여기

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

가 lonIN 라틴 원래 격자 (정규 격자를 가정)의 1D 경도 위도이다 DATAIN 원래 데이터의 2 차원 배열은, lonOUT 및 latOUT, 당신을 보간 할 2D 격자되어있다 ZG 반면 새 그리드의 출력입니다. 출력 그리드는 다음을 사용하여 만들 수 있습니다.

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

희망이 있습니다. 건배, 트론

+0

, 당신의 대답에 감사드립니다. 나는 그것을 시도했지만, 대신에 (dataIN, LonIN, LatIN ..) 대신에 dataIN, latIN, lonIN ..을 넣었다. 바보 나. 나는 다른 사람들을 위해 나의 훌륭한 코드를 넣을 것이다. 감사! – hrishi

0

나는 scipy.interpolate을 살펴볼 것입니다. griddata과 같은 모양이 필요한 것일 수 있습니다.

+0

빠른 응답을 감사드립니다. 감사합니다 – hrishi

0

트론드 덕분에, 내가 잘못하고있는 것을 깨달았습니다. 저에게 맞는 마지막 코드는 다음과 같습니다. 다른 사람들을 참조하기를 바랍니다. 이것은 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))