【发布时间】:2017-01-18 18:06:41
【问题描述】:
我有一个 NetCDF 变量,其时间维度为 x、y。它目前在笛卡尔坐标中,但我需要极坐标中的数据。我曾尝试创建一个函数来执行此操作,但我似乎无法做到这一点。有谁知道是否有更简单的方法可以做到这一点?
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 超出轴 1 的范围,大小为 176”,位于 * 行。
感谢任何帮助。
【问题讨论】:
-
了解您正在尝试做什么会很有帮助。从笛卡尔到极坐标通常是一个非常简单的转换,只需在维基百科上查找即可。我不明白你为什么要执行插值。查看确切的错误输出以及您正在使用该函数的数据也会很有帮助。你应该做一个简单的测试用例,从一开始就知道答案。