我已经按照以下图像(HDF5格式)中所述的格式保存了数据集。因此,我有不同的组,即4、2、40等,对于每个组,我有2个数据集Annotation
和Features
。我已经使用代码成功保存了它们,但是无法将它们重新加载。
奇怪的是,仅当我尝试读取Annotation
时才会发生错误。当我尝试阅读Features
时,阅读效果很好。
我正在使用以下代码:
dataSet = np.array([])
annotation = np.array([])
hdf5Object = readHDF5File('abc.hdf5','r')
w = 2
myGroup = hdf5Object[str(w)]
dataSet = np.array(myGroup['Features'])
annotation = np.array(myGroup['Annotation'])
请赐教于此,因为我为此付出了很多努力。谢谢。
编辑1
阅读
Annotation
时出现以下错误Traceback (most recent call last):
File "xyz.py", line 76, in getAllData
annotation = np.array(myGroup['Annotation'])
File "/usr/lib/python2.7/dist-packages/h5py/_hl/group.py", line 153, in __getitem__
oid = h5o.open(self.id, self._e(name), lapl=self._lapl)
File "h5o.pyx", line 173, in h5py.h5o.open (h5py/h5o.c:3403)
KeyError: "unable to open object (Symbol table: Can't open object)"
编辑2
因此hdf5文件分两步形成,第一步
Features
计算如下:features = <numpy array of thousand rows and 100 columns contains only floating numbers>
w = 2
f = h5py.File('abc.hdf5', 'a')
myGroup = f[str(w)]
myGroup.create_dataset('Features', data=features)
对于不同的
w
文件,附加文件并在不同时间计算特征。对于注释,使用相同类型的过程。
Annotation
也仅包含浮点。编辑3
下图是一个
Annotation
的Features
和w
中的数据内容。左窗口是Annotation
,右窗口是Features
。最佳答案
我只是发现我尝试访问数据集的方式是使用string
,并且在保存数据集名称时以某种方式将其保存在unicode
或utf-8
下。因此,当我将数据集名称转换为utf-8时,效果很好。
我如何弄清楚它的数据类型
myGroup = hdf5Object[str(w)]
childsIter = myGroup.iterkeys()
for child in childsIter:
print type(child)
这给了我一个线索,即我的数据集键的数据类型是unicode而不是字符串。因此,我将字符串转换为unicode,如下所示:
key = unicode('Annotation', "utf-8")
dS = np.array(myGroup[key])
要么
myGroup = hdf5Object[str(w)]
childsIter = myGroup.iterkeys()
for child in childsIter:
dS = np.array(myGroup[child])
关于python - 使用h5py读取HDF5时出错,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34594452/