2017-02-22 26 views
0

當在不同的數據陣列上運行時,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]爲布爾數組AB具有相同的座標,如(A[:-1] & B[1:]),但xarray很有幫助對準使得這等同於(A & B)[1:-1],具有不同的意義的實例。

但也有許多可能的應用:

  • 以在不同的時間
  • 進行測量以不同的緯度/經度
+0

你想要結果的座標是什麼?這看起來有點像你想要拒絕座標標籤,只是加入位置。 – Maximilian

+0

您可以複製DataArray,移動座標,然後加入?這樣,舊的da和新的da將會由於轉移而關閉 – Maximilian

+0

@Maximilian我意識到我需要通知'DataArray'的座標。在這種情況下,我確實想要拒絕座標標籤,我已經解決了('x.variable'&'y.variable'),但遺憾的是,它也丟失了所有其他信息。 – gerrit

回答

0

一個測量值之間的差異之間的差異將不得不做例如:

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

This s直到確保尺寸是一致的(並且如果不是這樣,將會廣播),但是它確實允許計算具有不同座標的值之間的操作。那麼coords=關鍵字對於告訴xarray結果的座標應該是什麼是必不可少的。

相關問題