我想将尺寸坐标几乎对齐的几个DataArray
串联起来,像这样:
import xarray as xr
da1 = xr.DataArray([[0, 1], [2, 3]], coords=[[0, 1], [0, 1]], dims=['x', 'y'])
da2 = xr.DataArray([[4, 5], [6, 7]], coords=[[0.1, 1.1], [-0.1, 0.9]], dims=['x', 'y'])
da = xr.concat([da1, da2], 'z')
但是由于坐标不完全对齐,我得到da
:
<xarray.DataArray (z: 2, x: 4, y: 4)>
array([[[nan, 0., nan, 1.],
[nan, nan, nan, nan],
[nan, 2., nan, 3.],
[nan, nan, nan, nan]],
[[nan, nan, nan, nan],
[ 4., nan, 5., nan],
[nan, nan, nan, nan],
[ 6., nan, 7., nan]]])
Coordinates:
* x (x) float64 0.0 0.1 1.0 1.1
* y (y) float64 -0.1 0.0 0.9 1.0
Dimensions without coordinates: z
像我们使用reindex
一样,能够容忍坐标中的某些差异将是很好的:
da = xr.concat([da1, da2], 'z', method='nearest', tolerance=0.2)
是否存在该功能不存在的原因?我该如何解决?
编辑:
如@jhamman所建议,以下示例更好地说明了我希望输出DataArray
是:
import xarray as xr
da1 = xr.DataArray([[0, 1], [2, 3]], coords=[[0, 1], [0, 1]], dims=['x', 'y'])
da2 = xr.DataArray([[4, 5], [6, 7]], coords=[[1.1, 2.1], [1.1, 2.1]], dims=['x', 'y'])
da = xr.concat([da1, da2], 'z', method='nearest', tolerance=0.2) # doesn't exist yet
da
请注意,da2
的坐标1.1已从da1
变为1,因为它已经足够接近了。 da2
中的坐标2.1不能与da1
中的任何坐标匹配,因此它保持原样。因此,匹配坐标取决于DataArray
的处理顺序:
<xarray.DataArray (z: 2, x: 3, y: 3)>
array([[[ 0., 1., nan],
[ 2., 3., nan],
[nan, nan, nan]],
[[nan, nan, nan],
[nan, 4., 5.],
[nan, 6., 7.]]])
Coordinates:
* x (x) float64 0 1 2.1
* y (y) float64 0 1 2.1
Dimensions without coordinates: z
答案 0 :(得分:0)
当前,您需要在调用xr.concat
之前手动重新索引数组:
In [1]: import xarray as xr
...: da1 = xr.DataArray([[0, 1], [2, 3]], coords=[[0, 1], [0, 1]], dims=['x', 'y'])
...: da2 = xr.DataArray([[4, 5], [6, 7]], coords=[[0.1, 1.1], [-0.1, 0.9]], dims=['x', 'y'])
...: da2r = da2.reindex_like(da1, method='nearest', tolerance=0.2)
...: da = xr.concat([da1, da2r], 'z')
...: da
...:
Out[1]:
<xarray.DataArray (z: 2, x: 2, y: 2)>
array([[[0, 1],
[2, 3]],
[[4, 5],
[6, 7]]])
Coordinates:
* x (x) int64 0 1
* y (y) int64 0 1
Dimensions without coordinates: z
此功能不存在是有原因的吗?
我不这么认为。我建议在xarray GitHub问题跟踪器上打开一个问题以建议此功能。