2016-09-22 92 views
3

我有一些數組與dims 'time', 'lat', 'lon'和一些只有'lat', 'lon'。我經常要做到這一點,以與一個2D(LAT-LON)以掩蔽時間依賴性數據掩蔽:在xarray布爾索引

x.data[:, mask.data] = np.nan 

當然,計算預期廣播。如果y是2D LAT-LON的數據,它的值被廣播到所有的時間座標X:

z = x + y 

但正如我所期待的索引沒有廣播。我希望能夠做到這一點,但它提出了ValueError異常:緩衝區有維數錯誤的:

x[mask] = np.nan 

最後,似乎xr.where確實廣播跨越時空座標面具的值如預期的那樣,但是你不能以這種方式設置值。

x_masked = x.where(mask) 

那麼,有沒有什麼我在這裏丟失,有利於使用缺少尺寸(需要廣播)的布爾掩模設置值?我是在頂部提供真正做到這一點的方式選項(在這種情況下,我可能也僅僅是使用標準numpy的陣列...)

回答

3

有點相關的問題在這裏:Concise way to filter data in xarray

目前最好的方法是.where.fillna的組合。

valid = date_by_items.notnull() 
positive = date_by_items > 0 
positive = positive * 2 
result = positive.fillna(0.).where(valid) 
result 

但變化在未來xarray,這將使這更簡潔 - 檢出GitHub庫如果你感興趣

+0

感謝您的確認,並高興地聽到更新正在積極來了! – jmilloy

+1

這些變化是否在xarray 0.8.2中生存? – gerrit