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

如何用Xarray实现二维分组分箱计算网格单元均值?

使用Xarray实现二维分箱并计算网格平均值

完全可行,问题出在二维分箱的分组逻辑上。下面结合你的李萨如图示例场景,给出完整的实现方案:

1. 生成示例数据

先构造带x、y坐标的一维样本数据,存入DataArray:

import numpy as np
import xarray as xr

# 生成李萨如图的x、y坐标及对应样本值
t = np.linspace(0, 2*np.pi, 1000)
x = np.sin(3*t)
y = np.sin(4*t)
sample_values = np.cos(t)  # 示例样本数值

# 创建带MultiIndex的DataArray
da = xr.DataArray(
    sample_values,
    coords={'point': xr.MultiIndex.from_arrays([x, y], names=['x', 'y'])},
    dims=['point']
)

2. 定义分箱规则

设置x、y方向的分箱边界,这里以5×5网格为例:

# 生成6个边界点,对应5个分箱区间
x_bins = np.linspace(x.min(), x.max(), 6)
y_bins = np.linspace(y.min(), y.max(), 6)

3. 执行二维分箱并计算平均值

核心是先对x、y坐标分别做分箱标记,再按标记分组求平均:

# 给每个样本分配x、y方向的箱索引
da['x_bin'] = xr.cut(da.point.get_level_values('x'), x_bins, labels=False)
da['y_bin'] = xr.cut(da.point.get_level_values('y'), y_bins, labels=False)

# 按x_bin和y_bin分组,计算每个网格的平均值
binned_result = da.groupby(['x_bin', 'y_bin']).mean()

# 转换为标准5×5二维结构,空网格填充NaN
binned_grid = binned_result.unstack(fill_value=np.nan)

最终的binned_grid就是你需要的5×5维度DataArray,每个元素对应对应网格内所有样本的平均值。

报错原因说明

如果之前直接对MultiIndex做分组,会因为索引结构不匹配触发IndexError。正确的思路是先把连续的x、y坐标转换成离散的箱索引,再基于两个维度的索引做分组,就能自然得到二维分箱结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 03:37:15