python-xarray:计算数据集的绝对值

Ray*_*ell 2 numpy-ufunc python-xarray

np.fabsxr.DataArray在' 上工作正常,但xr.Dataset在 ' 上则不然。

data = xr.DataArray(np.random.randn(2, 3), coords={'x': ['a', 'b']}, dims=('x', 'y'))
ds = xr.Dataset({'foo': data, 'bar': ('x', [1, 2]), 'baz': np.pi})
np.fabs(ds)
TypeError: ufunc 'fabs' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
np.fabs(ds['foo'])
<xarray.DataArray 'foo' (x: 2, y: 3)>
array([[ 0.384305,  0.161676,  0.07573 ],
       [ 0.789885,  1.299188,  1.965528]])
Coordinates:
  * x        (x) <U1 'a' 'b'
Dimensions without coordinates: y
Run Code Online (Sandbox Code Playgroud)

有什么想法如何将其应用到 axr.Dataset吗?

我可以循环遍历xr.Dataset(见下文)中的变量,但我不确定是否有更有效的方法

for i, var in enumerate(ds.data_vars):
    ds[var] = np.fabs(ds[var])
Run Code Online (Sandbox Code Playgroud)

sho*_*yer 8

使用 do 最简单的方法是使用 Python 的内置abs()函数:abs(ds)should do it。