如何对时间维度长度不同的两个xarray DataArray按日期对应相乘
实现方案
优先推荐xarray简洁实现
核心逻辑是将3小时分辨率的data2时间向下取整到日维度,直接匹配data1的日维度索引,xarray会自动完成广播,无需手动处理维度对齐:
import xarray as xr # 第一步:确保两个DataArray的time维度均为datetime64格式,避免索引匹配失败 data1["time"] = data1.time.astype("datetime64[ns]") data2["time"] = data2.time.astype("datetime64[ns]") # 第二步:将data1按照data2的时间匹配对应日期的值,自动广播为和data2完全一致的维度 data1_aligned = data1.sel(time=data2.time.dt.floor("D")) # 第三步:直接相乘,输出结果维度和data2完全一致 result = data1_aligned * data2
可选groupby实现方案
如果需要更明确的按日分组运算逻辑,可以用groupby实现:
result = data2.groupby(data2.time.dt.floor("D")).map( lambda day_slice: day_slice * data1.sel(time=day_slice.time.dt.floor("D").iloc[0]) )
注意事项
- 需保证两个DataArray的时间时区一致,不存在偏移,否则日期取整会出现匹配错误
- 如果存在个别日期缺失的情况,可以在
sel方法中添加参数method="nearest"做最近邻匹配,避免索引报错 - 两种方案输出结果的维度均为
(time: 224, latitude: 137, longitude: 261),完全符合需求
内容的提问来源于stack exchange,提问作者Eli Turasky
相关产品推荐
相关产品推荐

