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

如何对维度重叠的两个xarray执行外连接求和?

解决xarray外连接后求和(缺失值按0处理)的问题

要实现两个xarray数组在指定维度上的外连接求和(缺失值按0计算),可以通过以下几种简洁方式实现:

方法1:重新索引补0后相加

先提取所有唯一的坐标值,将两个数组重新索引到完整坐标集并填充0,再执行加法:

import xarray as xr

x = xr.DataArray([1,2,3], dims=("x"), coords={"x": ['a', 'b', 'c']})
y = xr.DataArray([10,20,30], dims=("x"), coords={"x": ['b', 'c', 'd']})

# 获取所有唯一的x坐标
all_x_coords = list(set(x.x.values) | set(y.x.values))
# 重新索引并填充缺失值为0
x_expanded = x.reindex(x=all_x_coords, fill_value=0)
y_expanded = y.reindex(x=all_x_coords, fill_value=0)
# 执行求和
result = x_expanded + y_expanded
# 按x坐标排序(可选,让结果更规整)
result = result.sortby("x")

print(result)

输出结果:

<xarray.DataArray (x: 4)>
array([ 1, 12, 23, 30])
Coordinates:
  * x        (x) object 'a' 'b' 'c' 'd'

方法2:合并数据集后求和

利用xr.merge执行外连接合并,再将缺失值填充为0后求和:

import xarray as xr

x = xr.DataArray([1,2,3], dims=("x"), coords={"x": ['a', 'b', 'c']})
y = xr.DataArray([10,20,30], dims=("x"), coords={"x": ['b', 'c', 'd']})

# 合并两个数组为数据集(外连接)
merged_ds = xr.merge([x.rename("arr1"), y.rename("arr2")], join="outer")
# 填充缺失值为0后求和
result = merged_ds.fillna(0).sum(dim="variable")
# 排序坐标
result = result.sortby("x")

print(result)

原理说明

xarray默认的算术运算(如x+y)采用内连接,仅保留两个数组共有的坐标。要实现外连接求和,核心是先将两个数组扩展到完整的坐标集,把缺失位置的值填充为0,再执行加法操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 04:33:39