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

如何将两个维度和坐标相同的2D xarray.DataArray合并为3D数组?

问题描述

我有两个xarray数组(chars和numbers):

chars = xarray.DataArray(
    data=[['A', 'B', 'C'],
          ['D', 'E', 'F'],
          ['G', 'H', 'I']],
    coords=[
        ('row', [1, 2, 3]),
        ('col', [10, 20, 30])
    ]
)

numbers = xarray.DataArray(
    data=[[1, 2, 3],
          [4, 5, 6],
          [7, 8, 9]],
    coords=chars.coords
)

我希望将它们合并为如下形式:

desired = xarray.DataArray(
    data=[[['A', 1], ['B', 2], ['C', 3]],
          [['D', 4], ['E', 5], ['F', 6]],
          [['G', 7], ['H', 8], ['I', 9]]],
    coords=[
        ('row', [1, 2, 3]),
        ('col', [10, 20, 30]),
        ('type', ['my_char', 'my_int'])
    ]
)

我研究了xarray的合并数据相关选项,但无法确定合适的方法及参数值,请问该如何合并这些数组?

解决方案

你可以用xarray.concat()方法实现需求,核心是先给两个数组添加目标中的type维度,再沿该维度拼接:

  1. 给每个数组添加type维度并指定对应坐标:
# 为chars添加type维度,坐标值为'my_char'
chars_with_type = chars.expand_dims(type=['my_char'])
# 为numbers添加type维度,坐标值为'my_int'
numbers_with_type = numbers.expand_dims(type=['my_int'])
  1. 沿type维度拼接两个数组:
result = xarray.concat([chars_with_type, numbers_with_type], dim='type')

执行后result的结构就和你期望的desired完全一致。

补充说明

  • expand_dims()用来给数组新增长度为1的维度,为后续拼接做准备;
  • concat()会自动对齐两个数组已有的row和col坐标,再沿指定的新维度合并数据,刚好匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 00:22:15