我正在使用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
使用上述代码获得的变量的维度和形状:
风变量的尺寸Ex。 U
及其形状
时间,lev,y,x_2和它的形状是(1186,lev:36,y:699,x_2:639)
水分变量的尺寸Ex。 QVAPOR
及其形状
时间,lev,y,x和它的形状是(1186,lev:36,y:699,x:639)
将U
和QVAPOR
相乘后;我计算UQ=U*QVAPOR
。 UQ
的尺寸和形状是
时间,列弗,y,x_2,x和形状是(时间:1186,左:36,y:699,x_2:639,x:639)
所以问题如下:
我无法确保尺寸正确。 UQ
的正确尺寸应为Times, lev, y, x
。任何人都可以帮助我如何将xarray数据集与不同的维度名称相乘。
我不知道为什么我得到5维UQ变量而U和QVAPOR各4维。
答案 0 :(得分:3)
与NumPy不同,Xarray通过 name 匹配数组维度,而不是位置。
它在算术中循环使用不同名称的维度,并且您的DataArray对象具有不同的维度:[Times,lev,y,x_2]和[Times,lev,y,x]。
简单的解决方法是重命名x_2
- >在将它们相乘之前,在第一个数组上x
,例如。 U.rename({'x_2': 'x'}) * QVAPOR
。
(请注意,如果x_2
上的坐标值与x
上的坐标值不完全匹配,您可能还需要对齐或重新索引。{{1}应该做的伎俩。)