填写 xarray dataarray 中缺失的索引位置
fill in missing index positions in xarray dataarray
在下面的示例中,我有一个名为 arr 的随机 DataArray。
某些维度上缺少一些索引(暗淡的“b”只有偶数整数 0、2、4,而暗淡的“c”只有奇数整数 1、3 ......)。
How do I add the missing indices (including 0) along all dimensions and fill the corresponding positions in the array with zeros?
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)
在下面的示例中,我有一个名为 arr 的随机 DataArray。
某些维度上缺少一些索引(暗淡的“b”只有偶数整数 0、2、4,而暗淡的“c”只有奇数整数 1、3 ......)。
How do I add the missing indices (including 0) along all dimensions and fill the corresponding positions in the array with zeros?
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)