【发布时间】:2018-10-09 00:33:33
【问题描述】:
我正在尝试在 xarray 中进行“加入”,但在其中一项上使用了非索引坐标。我认为这应该不会太难,但我一直在旋转。
我有一个在'a' 上索引的数据集,在'b' 上有一个坐标,在'b' 上索引了一个DataArray:
In [17]: ds=xr.Dataset(dict(a=(('x'),np.random.rand(10))), coords=dict(b=(('x'),list(range(10)))))
In [18]: ds
Out[18]:
<xarray.Dataset>
Dimensions: (x: 10)
Coordinates:
b (x) int64 0 1 2 3 4 5 6 7 8 9
Dimensions without coordinates: x
Data variables:
a (x) float64 0.3634 0.2132 0.6945 0.5359 0.1053 0.07045 0.5945 ...
In [19]: da=xr.DataArray(np.random.rand(10), dims=('b',), coords=dict(b=(('b'),list(range(10)))))
In [20]: da
Out[20]:
<xarray.DataArray (b: 10)>
array([0.796987, 0.275992, 0.747882, 0.240374, 0.435143, 0.285271, 0.753582,
0.556038, 0.365889, 0.434844])
Coordinates:
* b (b) int64 0 1 2 3 4 5 6 7 8 9
我可以通过加入等于da.b 的ds.b 将da 添加到我的数据集吗?
这和Join along a non-coordinate dimension in xarray有点关系,但是我不想做任何算术,最终结果的尺寸应该是'a',而不是'b'
谢谢!
编辑:根据@DSM 的要求,输出将是:
<xarray.Dataset>
Dimensions: (x: 10)
Coordinates:
b (x) int64 0 1 2 3 4 5 6 7 8 9
Dimensions without coordinates: x
Data variables:
a (x) float64 0.3634 0.2132 0.6945 0.5359 0.1053 0.07045 0.5945 ...
da (x) float64 0.796987, 0.275992, 0.747882, 0.240374, 0.435143 ...
Edit2:这是一个带有字符串键的示例答案,其中 ds 只有一个键子集。 (如果da 有一个子集,我认为这种方法不起作用,但额外的对齐可能会有所帮助)
In [23]: da=xr.DataArray(np.random.rand(5), dims=('b',), coords=dict(b=(('b'),list('edcba'))))
In [27]: da
Out[27]:
<xarray.DataArray (b: 5)>
array([0.174843, 0.953963, 0.092538, 0.749569, 0.780823])
Coordinates:
* b (b) <U1 'e' 'd' 'c' 'b' 'a'
In [25]: ds=xr.Dataset(dict(a=(('x'),np.random.rand(4))), coords=dict(b=(('x'),list('abcd'))))
In [24]: ds
Out[24]:
<xarray.Dataset>
Dimensions: (x: 5)
Coordinates:
b (x) <U1 'a' 'b' 'c' 'd' 'e'
Dimensions without coordinates: x
Data variables:
a (x) float64 0.7586 0.3529 0.5936 0.741 0.6344
In [26]: da.sel(b=ds.b)
Out[26]:
<xarray.DataArray (x: 4)>
array([0.780823, 0.749569, 0.092538, 0.953963])
Coordinates:
b (x) <U1 'a' 'b' 'c' 'd'
Dimensions without coordinates: x
【问题讨论】:
-
您能否编辑以包含您期望的输出?
标签: python-xarray