2016-08-07 2 views
1

위도/경도 그리드 해상도가 다른 두 개의 서로 다른 xarray 데이터 세트가 있습니다. 나는 더 높은 해상도로 하나의 xarray와 같은 해상도로 더 낮은 해상도로 하나의 xarray를 regrid하고 싶다. 몇 가지 예 (예 : http://earthpy.org/interpolation_between_grids_with_basemap.html)를 찾았지만 제대로 작동하지 않습니다. 내가Basemap을 사용하는 두 xarray 데이터 세트 간의 보간

import numpy as np 
import xarray as xray 
import mpl_toolkits.basemap 

var1=xray.DataArray(np.random.randn(len(np.linspace(40.5,49.5,10)),len(np.linspace(-39.5,-20.5,20))),coords=[np.linspace(40.5,49.5,10), np.linspace(-39.5,-20.5,20)],dims=['lat','lon']) 

(xlon, xlat)=np.meshgrid(np.linspace(-39.875,-20.125,80),np.linspace(40.125,49.875,40)) 
var2=xray.DataArray(-xlon**2+xlat**2,coords=[np.linspace(40.125,49.875,40),np.linspace(-39.875,-20.125,80)],dims=['lat','lon']) 

mpl_toolkits.basemap.interp(var1,var1.lon,var1.lat,var2.lon,var2.lat,checkbounds=False,masked=False,order=0) 

다음 얻을 오류 :

ValueError: xout and yout must have same shape!

스크린 샷 : 는 see screenshot

는 basemap.interp는() XOUT 및 행해져 Yout을 요구해야합니까 여기에 내가 테스트를 위해 만든 하나의 예이다 같은 모양? 그래서 var2는 사각형이어야합니까? 내 데이터 세트의 경우 거의 그렇지 않습니다. var1을 var2와 동일한 해상도로 재구성하려면 어떻게해야합니까?

참고 : regridding 후 var2와 관련된 몇 가지 조건을 고려하여 var1을 서브 샘플링하려고합니다. 예 :

var1_subset = var1.where(var2>1000) 

그래서 보간하는 동안 격자 점 손실을 최소화하고 싶습니다. XOUT 및 행해져 Yout이 번호 또는 출력 nlons의 수가 동일하고 nlats가 동일한 경우

답변

1

basemap.interp는

이유는 같은 길이의 출력 nlats 및 nlons를 생성하지 나중에 부분 집합 만 작동합니다. 예를 들어

: 여기

import numpy as np 
import xarray as xray 
import mpl_toolkits.basemap 
var1=xray.DataArray(np.random.randn(len(np.linspace(40.5,49.5,10)),len(np.linspace(-39.5,-20.5,20))),coords=[np.linspace(40.5,49.5,10), np.linspace(-39.5,-20.5,20)],dims=['lat','lon']) 

(xlon,xlat)=np.meshgrid(np.linspace(-39.875,20.125,80),np.linspace(40.125,49.875,80)) 
var2=xray.DataArray(-xlon**2+xlat**2,coords[np.linspace(40.125,49.875,80),np.linspace(-39.875,-20.125,80)],dims=['lat','lon']) 
mpl_toolkits.basemap.interp(var1,var1.lon,var1.lat,var2.lon,var2.lat,checkbounds=False,masked=False,order=0) 

은 xarray 또 다른 멋진 트릭입니다.

lonreg=var1.groupby_bins('lon',np.linspace(-39.875,20.125,80)).mean(dim='lon') 

regridded=lonreg.groupby_bins('lat',np.linspace(-39.5,20.5,20)).mean(dim='lat') 

당신이 가중 평균 재그 리딩을 원하는 경우,이 지역이 GROUPBY 개체의 무게와 SUM 함수를 사용하여 재그 리딩 평균 확장하기 쉽습니다.