2017-03-22 22 views
0

我想保存數據集的二維數組作爲屬性1D,因爲這樣的:xarray:2D轉換屬性通過to_netcdf

attrs = {'objects': np.array([(46.5, -42.5),(4.5, 44),(-69, -69),(-66.5, 73.5)])} 
ds = xr.Dataset(data_vars, coords, attrs) 
ds.to_netcdf('dataset.nc', engine='netcdf4', format='netCDF4') 

但加載該文件備份表明屬性發生變化到一維數組:

data = xr.open_dataset('dataset.nc') 
print(data.objects) 

# array([ 46.5, -42.5, 4.5, 44. , -69. , -69. , -66.5, 73.5]) 

這可能是什麼原因造成的?我嘗試傳遞一個元組列表,但結果是一樣的。

回答

1

NetCDF文件格式doesn't support multi-dimensional attributes。如果您想用xarray將多維數組存儲到netCDF文件中,則應改爲data_varscoords

但顯然netCDF-Python庫會很樂意將它們作爲向量編寫,默默丟棄形狀信息。 Xarray或NetCDF4-Python實際上應該在這些情況下引發錯誤。

如果您真的想要使用當前版本的h5netcdf,您可以通過在xarray中指定engine='h5netcdf'來讀取和寫入多維屬性。但是要注意,這會產生非標準的netCDF文件,這些文件在大多數工具中不可讀,我將來會使用h5netcdf中的這個功能considering removing

+0

您鏈接的頁面還說:「這比HDF5更具限制性,其中屬性可以是多維的」。然而,使用'engine ='h5netcdf''會給我帶來一個錯誤,'NetCDF:無法打開HDF5屬性'。我想我會看到有關將這些信息併入'data_vars'或'coords'的信息。 – Marein

+0

我看了一下將這些信息合併到'data_vars'或'coords'中,但它不太合適,因爲我的'objects'數據的維數與其餘數據無關。一個更好的選擇可能是爲這個數據創建一個完全獨立的數據集或其他存儲,但是我不得不跟蹤這兩個變量,這是一個恥辱。 – Marein

+0

明白了,除了'to_netcdf'之外,我必須明確地將'engine ='h5netcdf''傳遞給'open_dataset'。謝謝! – Marein