微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

填充 xarray 数据数组中缺失的索引位置

如何解决填充 xarray 数据数组中缺失的索引位置

在下面的示例中,我有一个名为 arr 的随机 DataArray。

某些维度上缺少一些索引(dim "b" 只有偶数 0、2、4,dim "c" 只有奇数 1、3、..)。

如何沿所有维度添加缺失的索引(包括 0)并用零填充数组中的相应位置?

import numpy as np
import xarray as xray


arr = xray.DataArray(np.random.uniform(-1,1,(2,3,4)),coords=[('a',range(2)),('b',range(0,6,2)),('c',range(1,8,2))])

print(arr)

# <xarray.DataArray (a: 2,b: 3,c: 4)>
# array([[[ 0.94036721,-0.11085778,-0.05764929,0.98909409],#         [ 0.16422786,-0.58663042,0.97949009,-0.74390197],#         [-0.96876003,-0.29459348,-0.45290188,-0.56563404]],# 
#        [[ 0.17087351,-0.66424163,0.8886398,0.49206143],#         [ 0.3554673,-0.53473276,0.13970573,0.14412157],#         [ 0.29111764,0.53117459,-0.28462545,0.3302524 ]]])
# Coordinates:
#   * a        (a) int32 0 1
#   * b        (b) int32 0 2 4
#   * c        (c) int32 1 3 5 7

# This does not work but is just to demonstrate what I want to achieve.

arr = arr.fill_missing_indices(fill_value=0)    # ???

print(arr)

# <xarray.DataArray (a: 2,b: 5,c: 8)>
# array([[[0.,0.94036721,0.,#         [0.,0.        ],0.16422786,-0.96876003,-0.56563404],0.        ]],# 
#        [[0.,0.17087351,0.3554673,0.29111764,0.3302524 ],0.        ]]])
# Coordinates:
#   * a        (a) int32 0 1
#   * b        (b) int32 0 1 2 3 4
#   * c        (c) int32 0 1 2 3 4 5 6 7

解决方法

创建新坐标:

coords = {k: range(0,v.values.max() + 1) for k,v in arr.coords.items()}

重新索引数组:

arr = arr.reindex(coords,fill_value=0)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。