2016-02-18 30 views
4

有時我得到以下陣列從我的HDF5文件:如何在Python中取消引用HDF5引用?

val1 = {ndarray} [<HDF5 object reference> <HDF5 object reference> <HDF5 object reference>] 

如果我試圖取消對它的引用與HDF5文件對象

f[val[0]] 

我得到一個錯誤

Argument 'ref' has incorrect type (expected h5py.h5r.Reference, got numpy.object_) 

回答

0

我我在試圖回答這個問題的時候遇到了這個問題,結果基本上是另一種形式的the same question。包含對其他對象的引用的數據集在HDF5中有點尷尬,但實際上你可以用一種非常直接的方式閱讀它們。這個想法是獲取被引用對象的名稱,然後直接從該文件中讀取該對象。

給定一個HDF5參考,ref和文件,file,您可以通過返回引用的數據集的名稱:

>>> name = h5py.h5r.get_name(ref, file.id) 

然後,只需讀取的實際數據集本身,像往常一樣:

>>> data = file[name].value # ndarray with the data in it. 

因此,要讀取所有參考數據集,只需要在整個參考數據集中包含map這個過程。