我有一个xarray数据集,其中一些变量的维数超出了需要(例如,“纬度”和“经度”变量也随时间变化的3D数据集)。如何删除额外的维度
例如,在下面的数据集中,“bar”是沿x
和y
轴的二维变量,沿x
轴具有常量值。如何从'bar'而不是'foo'中删除x
维度
>>> ds = xr.Dataset({'foo': (('x', 'y'), np.random.randn(2, 3))},
{'x': [1, 2], 'y': [1, 2, 3],
'bar': (('x', 'y'), [[4, 5, 6], [4, 5, 6]])})
>>> ds
<xarray.Dataset>
Dimensions: (x: 2, y: 3)
Coordinates:
* x (x) int64 1 2
* y (y) int64 1 2 3
bar (x, y) int64 4 5 6 4 5 6
Data variables:
foo (x, y) float64 -0.9595 0.6704 -1.047 0.9948 0.8241 1.643
删除额外维度的最直接方法(使用索引)会产生一条稍微令人困惑的错误消息:
问题是,在xarray中进行索引时,它会将索引坐标保持为标量坐标:
这通常很有用,但在这种情况下,当您尝试在原始数据集上设置标量坐标时,索引数组上的标量坐标
'x'
与非标量坐标(和维度)'x'
冲突。因此会出现xarray错误,而不是重写变量要解决这个问题,需要在索引后删除标量
'x'
。在当前版本的xarray中,可以使用drop
执行此操作:在xarray的未来版本(v0.9及更高版本)中,您将能够在通过写入
drop=True
进行索引时删除坐标,例如ds['bar'].sel(x=1, drop=True)
相关问题 更多 >
编程相关推荐