4

我正在使用xarray.open_mfdataset()函数读取多个 netCDF 格式的数据文件(WRF 模型输出文件)。我正在阅读和取消各种变量,例如 Variable和QVAPORresp 。我正在使用以下代码来读取 netCDF 变量和计算结果变量。UVUQ

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它的形状是

Times, lev, y, x_2 它的形状是 (1186, lev: 36, y: 699, x_2: 639)

湿度变量的维度 Ex。QVAPOR它的形状是

Times, lev, y, x 它的形状是 (1186, lev: 36, y: 699, x: 639)

乘以U和后QVAPOR;我计算UQ=U*QVAPOR. 的尺寸和形状UQ

Times, lev, y, x_2, x and shape is (Times: 1186, lev: 36, y: 699, x_2: 639, x: 639)

所以问题如下:

我无法获得正确的尺寸。的正确尺寸UQ应该是Times, lev, y, x。任何人都可以帮助我如何将 xarray 数据集与不同的维度名称相乘。我不确定为什么我会得到 5 维的 UQ 变量,而 U 和 QVAPOR 都是 4 维。

4

1 回答 1

9

与 NumPy 不同,Xarray 按名称匹配数组维度,而不是位置。

它在算术中循环具有不同名称的维度,并且您的 DataArray 对象具有不同的维度:[Times, lev, y, x_2] 和 [Times, lev, y, x]。

简单的解决方法是在将它们相乘之前在第一个数组上重命名x_2-> ,例如。.xU.rename({'x_2': 'x'}) * QVAPOR

(请注意,如果坐标值不完全匹配,您可能还需要对齐或重新索引坐标值。类似的东西应该可以解决问题。)x_2xU.rename({'x_2': 'x'}).reindex(x=QVAPOR.x, method='nearest', tolerance=123)

于 2018-03-09T06:18:03.540 回答