如何操作同一维度内不同坐标的值?

时间:2017-02-22 17:22:54

标签: python-xarray

在不同的数据阵列上运行时,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]相同,后者具有不同的含义。

但是有很多可能的应用程序:

  • 取不同时间测量值之间的差异
  • 采用不同纬度/经度的测量值之间的差异

1 个答案:

答案 0 :(得分:0)

人们必须做类似的事情:

xarray.DataArray(a.variable - b.variable, coords=a.coords, name="Δ")

这仍然确保尺寸是一致的(如果没有则会广播),但它确实允许计算具有不同坐标的值之间的操作。然后,coords=关键字对于告诉xarray结果的坐标应该是必不可少的。