xarray沿level维度切片相加后维度异常缩小问题咨询
xarray同shape切片相加后维度缩小问题解答
核心问题原因
xarray的算术运算默认基于维度坐标标签做对齐,而非直接按数组的形状位置逐元素计算:
- 你的a切片的level维度坐标值为原level数组的
[0, 1, ..., len(plev)-2]对应的值 - 你的b切片的level维度坐标值为原level数组的
[1, 2, ..., len(plev)-1]对应的值
二者level坐标只有[1, ..., len(plev)-2]的部分重叠,相加时xarray自动取坐标交集,因此最终结果的level维度长度比输入少1,就出现了输入都是22层、输出只有21层的情况。
另外注意你的代码存在变量名笔误:你读取的层坐标赋值给了level变量,但切片时使用的是plev,如果实际运行时plev和ds['level']的长度不一致,也会引发额外的维度问题。
解决方法
方法1:直接按数组位置相加(不需要坐标对齐逻辑时使用)
直接调用DataArray的.values属性取底层numpy数组计算,不需要坐标对齐的场景下这是最高效的写法:
# 相加后得到numpy数组 fluxInterp = a.values + b.values # 如果需要保留xarray DataArray结构,可以手动包装,沿用a的坐标即可 fluxInterp = xr.DataArray(a.values + b.values, coords=a.coords, dims=a.dims)
方法2:重置坐标后用xarray逻辑相加(需要保留DataArray结构时使用)
将两个切片的level坐标重置为位置索引,避免坐标标签不匹配的问题:
a = a.assign_coords(level=range(len(a.level))) b = b.assign_coords(level=range(len(b.level))) fluxInterp = a + b
内容的提问来源于stack exchange,提问作者Appolinaire Derbetini
相关产品推荐
相关产品推荐

