0
시간, x, y의 크기를 가진 NetCDF 변수가 있습니다. 그것은 현재 직교 좌표이지만 극좌표로 데이터가 필요합니다. 이 작업을 수행하는 함수를 만들려고했지만 올바르게 만들 수 없습니다. 이 작업을 수행하는 더 간단한 방법이 있는지 아는 사람 있습니까? 순간 Regrid 3D Cartesian에서 Polar로 NetCDF 데이터 극복
def regrid(x,y,xcent,ycent,vardat):
x=np.subtract(x,xcent)
y=np.subtract(y,ycent)
threshmin = np.min(vardat)
threshmax = np.max(vardat)
rmax = np.ceil(np.sqrt(((x[-1]-x[0])/2.)**2 + ((y[-1]-y[0])/2.)**2))
r = np.arange(0,rmax,(x[1]-x[0]))
theta_inc = np.floor(np.arctan2(y[1]-y[0],(x[-1]-x[0])/2.)/np.pi*180.)
if theta_inc <1.0:
theta_inc = 1
theta = np.arange(0,(360-theta_inc),theta_inc)
r2d, theta2d = np.meshgrid(r,theta)
x_polar = r2d*np.cos(np.pi/180.*theta2d)
y_polar = r2d*np.sin(np.pi/180.*theta2d)
x_range = np.arange(x[0],x[-1]+1,(x[1]-x[0]))
y_range = np.arange(y[0],y[-1]+1,(y[1]-y[0]))
field_rt = np.zeros((len(r),len(theta)))
field_interp = interp2d(x_range,y_range,vardat,kind='linear')
for i in np.arange(0,len(r)):
for j in np.arange(0,len(theta)):
* field_rt[i,j] = field_interp(x_polar[i,j],y_polar[i,j])
return r, theta, field_rt
r1,theta1, field = regrid(we_ea,no_so,124,124,olr[0,:,:])
, 나는 *와 라인에서 "인덱스 (176)의 크기는 176과 축 1의 범위를 벗어났습니다"라는 오류가 발생합니다.
도움을 주시면 감사하겠습니다.
당신이 정확하게 뭘 하려는지 알고 도움이 될 것입니다. 데카르트에서 극지방으로 변경하는 것은 대개 매우 간단합니다. 위키 피 디아에서 찾아보세요. 왜 보간을하는지 이해가 안됩니다. 정확한 오류 출력과 함수를 사용하고있는 데이터를 확인하는 것도 도움이됩니다. 당신은 답을 알고있는 간단한 테스트 케이스를 만들어야한다. – kiliantics