gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 09:47:28 24 4
gpt4 key购买 nike

我正在使用 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com