簡體   English   中英

xarray分層數據組織

[英]xarray Hierarchical data organization

我有一個腳本,用於計算由於特定電流分布而在空間區域中產生的磁場。 計算結果存儲在坐標為vec_compxyz vec_comp vec_comp跨越字符串['x', 'y', 'z']以指示磁場的不同分量。

我正在為許多不同的電流配置(例如,具有不同半徑和距關注區域的距離的電流回路)計算此磁場。 我想將這些磁場對象(xarray)收集到另一個xarray中,該xarray的坐標表示當前分布的調整參數。 所以我將有一個數組可以做類似的事情

mag_array.sel(r=0.1, offset=0.5)

這將返回給我4維xarray,它是針對當前分布的那些特定參數計算得出的。

我看到可以繼續進行操作,並向原始DataArray添加其他坐標以指示不同的當前參數,但是攜帶這個可能有很多坐標的對象對我來說似乎很笨拙。 因此,需要分層數據結構。

完成這種數據結構的自然方法是什么?

編輯:我已經嘗試過類似以下內容。 假設B1B2是我要合並的兩個DataArray。 我已經嘗試過類似的東西:

mag_array = xr.DataArray([B1, B2], 
                      coords=[('r', [0.1, 0.2])])

但這會產生一個錯誤,因為我猜xarray在創建新數組時正試圖了解B1和B2的結構,因此與其期望一個指定的維數(在這種情況下為r ),不如期待它的全部4個規范。通過將兩個xarray放入數組中,舊尺寸( vec_compxyz )加上了我創建的新尺寸。

如果我嘗試

mag_array = xr.DataArray([B1, B2])

哪個確實會創建一個新數組,但是如果我再看一下

mag_array[0]

我取回一個xarray,但是所有舊的坐標信息都已刪除。

本質上講,我可以通過執行以下操作來完成自己喜歡的事情:

mag_array = np.zeros(2,2)
mag_array[0,0] = B1
mag_array[0,1] = B2

等等,或者遍歷事物,然后mag_array將具有我想要的行為。 問題是它不會隨身攜帶坐標,我必須自己跟蹤這些信息。 我如何才能兩全其美? 可以攜帶我的對象而不關心對象的性質以及是否可以通過坐標而不是索引訪問數組的數組嗎?

要組合單獨的DataArray對象,可以使用xarray.concat() ,例如,

mag_array = xr.concat([B1, B2], dim=pd.Index([0.1, 0.2], name='r'))

如果您指定了額外的標量坐標(我建議這樣做),則只需指定要按名稱串聯的坐標,例如,

mag_array = xr.concat([B1.assign_coords(r=0.1), B2.assign_coords(r=0.2)], dim='r')

同樣值得一看的是諸如xarray.open_mfdataset()類的輔助函數,這些輔助函數結合了從磁盤打開文件並沿共享軸將它們串聯的過程,例如xr.open_mfdataset('all/my/files/*.nc')

目前, open_mfdataset最多只能連接一個維度,但是計划在將來擴展它以處理多個維度。

最后,請注意,xarray(當前)沒有針對未對齊軸的任何版本的分層數據結構。 對齊的軸是xarray.Datasetxarray.DataArray的數據模型的有意約束。 如果您的子組沒有沿公共軸對齊,則需要在一些單獨的數據結構中跟蹤它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM