在不同的数据阵列上运行时,xarray
足以确保操作发生在具有相同坐标的值上。这通常是可取的,但有时我想明确地操作具有不同坐标的值。这将导致空DataArray
:
In [275]: ds = xarray.DataArray(random.random(size=10), {"a": arange(10)}, dims=["a"])
In [274]: ds.sel(a=slice(5, None)) - ds.sel(a=slice(0, 4))
Out[274]:
<xarray.DataArray (a: 0)>
array([], dtype=float64)
Coordinates:
* a (a) int64
当然,我可以绕过.values
来操作基础xarray
,但是有没有办法在xarray API中执行此操作?我意识到我必须告知xarray应该为结果分配什么坐标,但是仍然可以复制尺寸,未受影响的坐标,名称,编码和属性。
我的实际用例是查找具有相同坐标的布尔数组A[i] & B[i+1]
和A
的两个B
的实例,例如(A[:-1] & B[1:])
,但xarray
有用的对齐方式使其与(A & B)[1:-1]
相同,后者具有不同的含义。
但是有很多可能的应用程序:
答案 0 :(得分:0)
人们必须做类似的事情:
xarray.DataArray(a.variable - b.variable, coords=a.coords, name="Δ")
这仍然确保尺寸是一致的(如果没有则会广播),但它确实允许计算具有不同坐标的值之间的操作。然后,coords=
关键字对于告诉xarray
结果的坐标应该是必不可少的。