xarray:如何将数组添加到特定维度?
xarray: How to add an array to specific dimension?
一个简单的例子如下:
arr = xr.DataArray(np.random.rand(2,3,4), coords={'x': ['a', 'b'], 'y': ['c','d', 'e'], 'z': ['f', 'g', 'h', 'i']}, dims=('x', 'y', 'z'))
to_add = np.random.rand(3,4)
如何将 to_add
添加到带有 a_plus
标签的 arr
中的坐标 x
?
所以结果看起来像:
<xarray.DataArray (x: 3, y: 3, z: 4)>
array([[[0.753333, 0.585982, 0.271593, 0.017763],
[0.858164, 0.628703, 0.951855, 0.097232],
[0.372766, 0.006932, 0.848118, 0.06778 ]],
[[0.935869, 0.517625, 0.841972, 0.116477],
[0.161093, 0.449632, 0.640333, 0.578949],
[0.613066, 0.315713, 0.227409, 0.853698]],
[[0.405509, 0.194987, 0.662878, 0.105522],
[0.565623, 0.436369, 0.153299, 0.72756 ],
[0.589336, 0.957754, 0.645316, 0.319808]]])
Coordinates:
* y (y) |S1 'c' 'd' 'e'
* x (x) |S6 'a' 'b' 'a_plus'
* z (z) |S1 'f' 'g' 'h' 'i'
使用xr.concat
怎么样?
In [2]: to_add = xr.DataArray(to_add[np.newaxis, ...], dims=('x', 'y', 'z'),
...: coords={'x': ['a_plus']})
...:
...: xr.concat([arr, to_add], dim='x')
...:
Out[2]:
<xarray.DataArray (x: 3, y: 3, z: 4)>
array([[[0.77673 , 0.824249, 0.322716, 0.112895],
[0.370895, 0.822571, 0.313705, 0.791842],
[0.050617, 0.748153, 0.468028, 0.45783 ]],
[[0.533804, 0.3056 , 0.045392, 0.741007],
[0.155017, 0.074398, 0.664608, 0.778044],
[0.202733, 0.265853, 0.326244, 0.840031]],
[[0.466699, 0.118699, 0.841625, 0.822482],
[0.755435, 0.334517, 0.389928, 0.885802],
[0.985752, 0.992393, 0.977829, 0.992257]]])
Coordinates:
* y (y) object 'c' 'd' 'e'
* z (z) object 'f' 'g' 'h' 'i'
* x (x) object 'a' 'b' 'a_plus'
一个简单的例子如下:
arr = xr.DataArray(np.random.rand(2,3,4), coords={'x': ['a', 'b'], 'y': ['c','d', 'e'], 'z': ['f', 'g', 'h', 'i']}, dims=('x', 'y', 'z'))
to_add = np.random.rand(3,4)
如何将 to_add
添加到带有 a_plus
标签的 arr
中的坐标 x
?
所以结果看起来像:
<xarray.DataArray (x: 3, y: 3, z: 4)>
array([[[0.753333, 0.585982, 0.271593, 0.017763],
[0.858164, 0.628703, 0.951855, 0.097232],
[0.372766, 0.006932, 0.848118, 0.06778 ]],
[[0.935869, 0.517625, 0.841972, 0.116477],
[0.161093, 0.449632, 0.640333, 0.578949],
[0.613066, 0.315713, 0.227409, 0.853698]],
[[0.405509, 0.194987, 0.662878, 0.105522],
[0.565623, 0.436369, 0.153299, 0.72756 ],
[0.589336, 0.957754, 0.645316, 0.319808]]])
Coordinates:
* y (y) |S1 'c' 'd' 'e'
* x (x) |S6 'a' 'b' 'a_plus'
* z (z) |S1 'f' 'g' 'h' 'i'
使用xr.concat
怎么样?
In [2]: to_add = xr.DataArray(to_add[np.newaxis, ...], dims=('x', 'y', 'z'),
...: coords={'x': ['a_plus']})
...:
...: xr.concat([arr, to_add], dim='x')
...:
Out[2]:
<xarray.DataArray (x: 3, y: 3, z: 4)>
array([[[0.77673 , 0.824249, 0.322716, 0.112895],
[0.370895, 0.822571, 0.313705, 0.791842],
[0.050617, 0.748153, 0.468028, 0.45783 ]],
[[0.533804, 0.3056 , 0.045392, 0.741007],
[0.155017, 0.074398, 0.664608, 0.778044],
[0.202733, 0.265853, 0.326244, 0.840031]],
[[0.466699, 0.118699, 0.841625, 0.822482],
[0.755435, 0.334517, 0.389928, 0.885802],
[0.985752, 0.992393, 0.977829, 0.992257]]])
Coordinates:
* y (y) object 'c' 'd' 'e'
* z (z) object 'f' 'g' 'h' 'i'
* x (x) object 'a' 'b' 'a_plus'