2017-03-22 5 views
0

によって1Dに変換私のような、属性として2D配列でデータセットを保存しようとしている: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') 

しかし、バック属性が変更されたことを示しているが、ファイルをアップロード1Dアレイへ:

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_varsまたはcoordsにする必要があります。

明らかに、netCDF-Pythonライブラリは、喜んでそれらをベクターとして書き出し、静かに形状情報を破棄します。 XarrayやNetCDF4-Pythonでは、これらの場合にはエラーが発生するはずです。

現在のバージョンのh5netcdfでは、xarrayにengine='h5netcdf'を指定することで多次元属性を読み書きできます。しかし、これは、ほとんどのツールでは読み込めない非標準のNetCDFファイルを作成することに注意してください。私は将来、h5netcdfからconsidering removingこの機能を利用しています。

+0

リンクしたページには、「これは属性が多次元になるHDF5よりも制限的です」と記載されています。しかし、 'engine = 'h5netcdf'を使うと、NetCDF:Can not open HDF5 attribute 'というエラーが表示されます。私は 'data_vars'や' coords'に情報を組み込むことを見ています。 – Marein

+0

私は 'data_vars'や' coords'に情報を組み込むのを見ましたが、私の 'objects'データの次元は他のデータと比べて意味をなさないので本当に適切ではありません。より良い選択肢は、このデータ用に完全に別のデータセットやその他のストレージを作成することですが、2つの変数を把握しておく必要があります。 – Marein

+0

これは、 'to_netcdf'に加えて' engine = 'h5netcdf' 'を' open_dataset'に明示的に渡す必要がありました。ありがとう! – Marein