簡體   English   中英

填充 xarray 數據數組中缺失的索引位置

[英]fill in missing index positions in xarray dataarray

在下面的示例中,我有一個名為 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.11085778, 0., -0.05764929, 0.,  0.98909409],
#         [0.,  0.,         0.,  0.,         0.,  0.,         0.,  0.        ],
#         [0.,  0.16422786, 0., -0.58663042, 0.,  0.97949009, 0., -0.74390197],
#         [0.,  0.,         0.,  0.,         0.,  0.,         0.,  0.        ],
#         [0., -0.96876003, 0., -0.29459348, 0., -0.45290188, 0., -0.56563404],
#         [0.,  0.,         0.,  0.,         0.,  0.,         0.,  0.        ]],
# 
#        [[0.,  0.17087351, 0., -0.66424163, 0.,  0.8886398 , 0.,  0.49206143],
#         [0.,  0.,         0.,  0.,         0.,  0.,         0.,  0.        ],
#         [0.,  0.3554673 , 0., -0.53473276, 0.,  0.13970573, 0.,  0.14412157],
#         [0.,  0.,         0.,  0.,         0.,  0.,         0.,  0.        ],
#         [0.,  0.29111764, 0.,  0.53117459, 0., -0.28462545, 0.,  0.3302524 ],
#         [0.,  0.,         0.,  0.,         0.,  0.,         0.,  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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM