如何将两个维度和坐标相同的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维度,再沿该维度拼接:
- 给每个数组添加
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'])
- 沿
type维度拼接两个数组:
result = xarray.concat([chars_with_type, numbers_with_type], dim='type')
执行后result的结构就和你期望的desired完全一致。
补充说明
expand_dims()用来给数组新增长度为1的维度,为后续拼接做准备;concat()会自动对齐两个数组已有的row和col坐标,再沿指定的新维度合并数据,刚好匹配你的需求。
内容的提问来源于stack exchange,提问作者PyRookie
相关产品推荐
相关产品推荐

