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

使用Dataset/DataArray.group_by时单维度求和维度堆叠问题咨询

解决xarray中group_by仅对单个维度求和的问题

我明白你遇到的困扰了——当你的分组变量是多维的(比如示例里的kind同时有layer和qpoint两个维度),直接用group_by会默认把所有维度都纳入分组逻辑,最后导致维度堆叠,而你只想针对其中某一个维度完成分组求和。

这里有个精准的解决方案:在调用groupby的时候,通过dim参数指定你想要分组的单个维度,这样就能只对目标维度执行聚合操作,其他维度会被保留下来。

举个完整的示例,我们先给数据集加上一个数据变量用于演示求和:

import xarray as xr
import numpy as np

ds = xr.Dataset()
ds['kind'] = (['layer', 'qpoint'], [
    ['gamma', 'other', 'selected', 'selected', 'other', 'other'],
    ['selected', 'selected', 'other', 'gamma', 'other', 'other'],
])
# 新增随机数据变量用于演示求和逻辑
ds['values'] = (['layer', 'qpoint'], np.random.rand(2, 6))

如果你想针对qpoint维度按kind分组求和,同时保留layer维度,只需要这样写:

# 指定dim='qpoint',表示仅在qpoint维度上按kind分组
result = ds.groupby('kind', dim='qpoint').sum(dim='qpoint')

这样得到的结果会保留layer维度,同时把qpoint维度按kind聚合,最终维度为(layer, kind),完全符合你“仅对单个维度求和”的需求。

如果你的需求是针对layer维度分组求和,只需要把dim参数改成'layer'即可:

result = ds.groupby('kind', dim='layer').sum(dim='layer')

为什么这能解决问题?

默认情况下,当分组变量是多维的,xarray会把所有维度都作为分组的键(相当于每个(layer, qpoint)的组合都是独立分组),求和后会把所有维度都聚合掉。而通过dim参数指定单个维度,xarray只会在这个维度上根据分组变量的值进行分组,其他维度会被原样保留,完美实现你想要的“仅对指定单个维度求和”的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:11:48