如何增加Python Xarray数据集?
我正在使用如何增加Python Xarray数据集?,python,netcdf,python-xarray,xarray,Python,Netcdf,Python Xarray,Xarray,我正在使用xarray.open_mfdataset()函数读取多个netCDF格式的数据文件(WRF模型输出文件)。我正在读取并消除各种变量的聚集,例如变量QVAPOR,U,Vresp。我使用以下代码读取netCDF变量并计算结果变量UQ import xarray as xr def desta_var(pp,var): flnm = xr.open_mfdataset(pp) if var=="U": U1 = (flnm.variables[var])
xarray.open_mfdataset()
函数读取多个netCDF格式的数据文件(WRF模型输出文件)。我正在读取并消除各种变量的聚集,例如变量QVAPOR
,U
,V
resp。我使用以下代码读取netCDF变量并计算结果变量UQ
import xarray as xr
def desta_var(pp,var):
flnm = xr.open_mfdataset(pp)
if var=="U":
U1 = (flnm.variables[var])
U = 0.5*(U1[:,:,:,0:-1] + U1[:,:,:,1:] )
del U1
return U
elif var=="V":
V1 = (flnm.variables[var])
V=0.5*(V1[:,:,0:-1,:] + V1[:,:,1:,:])
del V1
return V
else:
W1 = (flnm.variables[var])
W=0.5*(W1[:,0:-1,:,:] + W1[:,1:,:,:])
del W1
return W
U=desta_var('./WRF_3D_2005_*.nc','U')
V=desta_var('./WRF_3D_2005_*.nc','V')
flnm=xr.open_mfdataset('./WRF_3D_2005_*.nc')
QV = flnm.QVAPOR
UQ = U*QV
使用上述代码获得的变量的尺寸和形状:
风变量的尺寸,例如U
,其形状为
时间,lev,y,x_2,它的形状是(1186,lev:36,y:699,x_2:639)
湿度变量的尺寸,例如QVAPOR,其形状为
时间,列夫,y,x,它的形状是(1186,列夫:36,y:699,x:639)
将U
和QVAPOR
相乘后;我计算UQ=U*QVAPOR
。UQ
的尺寸和形状为
时间,lev,y,x_2,x和形状是(时间:1186,lev:36,y:699,x_2:639,x:639)
因此,问题如下:
我无法得到正确的尺寸。UQ
的正确尺寸应为倍,lev,y,x
。谁能帮我把xarray数据集与不同的维度名称相乘。
我不知道为什么我得到的UQ变量是5维的,而U和QVAPOR分别是4维的。与NumPy不同,Xarray通过名称而不是位置匹配数组维度 它使用不同的算术名称在维度上循环,并且您的DataArray对象具有不同的维度:[Times,lev,y,x_2]和[Times,lev,y,x] 简单的解决方法是在第一个数组上重命名
x_2
->x
,然后再将它们相乘,例如U.rename({'x_2':'x'})*QVAPOR
(请注意,如果坐标值与沿
x
的坐标值不完全匹配,可能还需要沿x
对齐或重新编制坐标值索引。类似U.rename({'x\U 2':'x'})。重新编制索引(x=QVAPOR.x,method='nearest',tolerance=123)
应该可以做到这一点。)很难判断您的问题出在哪里,因为我们看不到U或QV的尺寸。我建议用一个最小的、完整的、可验证的问题来编辑你的问题:@jhamman。。谢谢你的建议。我对问题做了修改。我尽量把问题简短。谢谢你的回复@shoyer。你的解决方案奏效了。我只需要用变量稍微调整一下。我使用了下面的乘法代码UQ1=flnm.QVAPOR.rename({'x':'x_2'})*U
在此之后,我重命名了输出UQ1.重命名({'x_2':'x'})
因此输出变量的维度现在是:(Times:1186,lev:36,y:699,x:639)