python - 如何乘以 Python Xarray 数据集?

标签 python netcdf python-xarray

我正在使用 xarray.open_mfdataset() 函数读取多个 netCDF 格式的数据文件(WRF 模型输出文件)。我正在阅读和分解各种变量,例如变量 QVAPORUV 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,它的形状是

Times, lev, y, x_2 and it's shape is (1186, lev: 36, y: 699, x_2: 639)

水分变量 Ex 的维度。 QVAPOR 其形状为

Times, lev, y, x and it's shape is (1186, lev: 36, y: 699, x: 639)

UQVAPOR 相乘后;我计算 UQ=U*QVAPORUQ 的维度和形状是

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 数据集与不同的维度名称相乘。 我不确定为什么我得到的 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_2 的坐标值与沿 x 的坐标值不完全匹配,您可能还需要对齐或重新索引 。像 U.rename({'x_2': 'x'}).reindex(x=QVAPOR.x, method='nearest', tolerance=123) 这样的东西应该可以解决问题。)

关于python - 如何乘以 Python Xarray 数据集?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49186609/

相关文章:

python - Pandas :从数据框中选择列

python - 如何在 python 3.5 中安装 opencv 库?

python - 从 netCDF 中提取位置和跨时间范围的值

python - xarray 自动将 _FillValue 应用于 netCDF 输出上的坐标

python - 在 ubuntu 16.04 上安装 opencv 后出现错误 no module opencv

python - 在 ElasticSearch 上使用 pycurl 进行双重请求

python - 使用 xarray 中的 'year + month' 组合计算平均值

python - 将 csv 转换为 netcdf

python 掩码 netcdf 数据使用 shapefile

python - 如何识别 xarray 中的时间、lon 和 lat 坐标?