You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Xarray相加同维度NetCDF文件时时间维度变为0的问题求助

问题:Xarray相加NetCDF数据集后时间维度变为0

问题背景

我有多个NetCDF数据集,每个仅包含t2m变量,维度均为(longitude: 38, latitude: 35, time: 1)。希望用Xarray将这些数据集相加,得到每个地理单元的变量总和。其中两个数据集i_january90和i_february89的空间范围、维度完全一致,但相加后结果的时间维度变成了time: 0。

复现代码

import xarray as xr
import numpy as np

# 切换到工作目录
cd (Path to my drive working folder)

i_january90 = xr.open_dataset("i_january90.nc")
i_february89 = xr.open_dataset("i_february89.nc")

# 两个数据集相加
I = i_january90 + i_february89

已尝试的无效处理

考虑到数据存在缺失值,尝试用xr.where处理,但时间维度仍为0:

I = xr.where(i_january90.notnull() & i_february89.notnull(), i_january90+i_february89, np.nan)

原因分析

时间维度消失的核心原因是两个数据集的time坐标值不匹配。Xarray做算术运算时会自动对齐坐标:如果两个数据集的time坐标没有交集,运算后该维度会被过滤为空(size=0)。哪怕两个数据集的time维度长度都是1,但如果具体时间戳不同(比如一个是1990年1月,一个是1989年2月),Xarray会判定时间无重叠,相加后time维度就会变成0。

解决方案

根据需求,有两种常用处理方式:

方式1:忽略时间坐标,按位置直接相加

如果不需要保留时间坐标,或确认两个数据集的时间维度是对应位置的代表值,可先移除time坐标再相加:

# 移除time坐标后相加
I = i_january90.drop_vars("time") + i_february89.drop_vars("time")

# 或仅针对t2m变量操作
I = i_january90["t2m"] + i_february89["t2m"]

方式2:统一时间坐标后相加

如果需要保留时间维度,可手动对齐两个数据集的time坐标,或合并时间维度后求和:

# 将其中一个数据集的time坐标修改为与另一个对齐
i_february89_aligned = i_february89.assign_coords(time=i_january90.time)
I = i_january90 + i_february89_aligned

# 或合并所有时间点后沿time维度求和
combined = xr.concat([i_january90, i_february89], dim="time")
I = combined.sum(dim="time")

内容的提问来源于stack exchange,提问作者oreobrown

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 00:26:10