我有一个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,:,:])
此刻,我收到一条错误说&#34;索引176超出了轴1的大小为176&#34;在*。
的行感谢任何帮助。
答案 0 :(得分:2)
这是一种(未优化的)最近邻居方法,用于将数据从常规笛卡尔网格重新映射到常规极坐标网格。坐标间距BarChart
和dr
应根据您的需要进行调整。您也可以搜索N个最近邻居并应用一些统计度量,例如:距离加权平均值左右。对于大型数据集,我建议使用来加速最近邻搜索。对于重新映射地理空间数据,有一个很好的快速包,名为pykdtree。
dphi