【发布时间】:2019-05-29 04:03:52
【问题描述】:
我想连接几个维度坐标几乎对齐的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
【问题讨论】:
-
您能否更具体地了解输出数据集的外观?坐标和尺寸是多少?
标签: python-xarray