使用h5py

时间:2016-01-04 15:27:37

标签: python numpy hdf5 h5py

我已将此数据集保存在此表单中,如下图所示(HDF5格式)。所以我有不同的组,即4,2,40等。对于每个组,我有2个数据集AnnotationFeatures。我已经使用代码成功保存了它们,但我无法加载它们。

奇怪的是,只有当我尝试阅读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'])

请在这里赐教,因为我现在已经为此做了很多努力。感谢。

View of HDF5 generated using ViTables 2.1

编辑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的{​​{1}}和Features中的数据内容。左侧窗口为w,右侧窗口为Annotation

enter image description here

1 个答案:

答案 0 :(得分:2)

我刚刚发现我尝试访问数据集的方式是使用string,并且在保存数据集名称时,它保存在unicodeutf-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])