Я никогда раньше не работал с файлами HDF5, и для начала я получил несколько примеров файлов. Я проверил все основы работы с h5py
, просматривая различные группы в этих файлах, их имена, ключи, значения и так далее. Все работает нормально, пока я не хочу посмотреть наборы данных, которые сохраняются в группах. Я получаю их .shape
и .dtype
, но когда я пытаюсь получить доступ к случайному значению путем индексации (например, grp["dset"][0]
), я получаю следующую ошибку:
IOError Traceback (most recent call last)
<ipython-input-45-509cebb66565> in <module>()
1 print geno["matrix"].shape
2 print geno["matrix"].dtype
----> 3 geno["matrix"][0]
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/dataset.pyc in __getitem__(self, args)
443 mspace = h5s.create_simple(mshape)
444 fspace = selection._id
--> 445 self.id.read(mspace, fspace, arr, mtype)
446
447 # Patch up the output for NumPy
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/h5d.so in h5py.h5d.DatasetID.read (h5py/h5d.c:2782)()
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_proxy.so in h5py._proxy.dset_rw (h5py/_proxy.c:1709)()
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_proxy.so in h5py._proxy.H5PY_H5Dread (h5py/_proxy.c:1379)()
IOError: Can't read data (Can't open directory)
Я разместил эту проблему в группе h5py Google, где она была предположил, что в наборе данных может быть фильтр, который я не установил. Но файл HDF5 был создан с использованием только сжатия gzip, который, насколько я понял, должен быть переносимым стандартом.
Кто-нибудь знает, что я мог здесь упустить? Я даже нигде не могу найти описание этой ошибки или подобных проблем, а файл, включая проблемный набор данных, можно легко открыть с помощью программного обеспечения HDFView.
Изменить
По-видимому, эта ошибка возникает из-за того, что по какой-то причине фильтр сжатия gzip недоступен в моей системе. Если я попытаюсь создать пример файла со сжатием gzip, произойдет следующее:
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-33-dd7b9e3b6314> in <module>()
1 grp = f.create_group("subgroup")
----> 2 grp_dset = grp.create_dataset("dataset", (50,), dtype="uint8", chunks=True, compression="gzip")
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/group.pyc in create_dataset(self, name, shape, dtype, data, **kwds)
92 """
93
---> 94 dsid = dataset.make_new_dset(self, shape, dtype, data, **kwds)
95 dset = dataset.Dataset(dsid)
96 if name is not None:
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/dataset.pyc in make_new_dset(parent, shape, dtype, data, chunks, compression, shuffle, fletcher32, maxshape, compression_opts, fillvalue, scaleoffset, track_times)
97
98 dcpl = filters.generate_dcpl(shape, dtype, chunks, compression, compression_opts,
---> 99 shuffle, fletcher32, maxshape, scaleoffset)
100
101 if fillvalue is not None:
/home/sarah/anaconda/lib/python2.7/site-packages/h5py/_hl/filters.pyc in generate_dcpl(shape, dtype, chunks, compression, compression_opts, shuffle, fletcher32, maxshape, scaleoffset)
101
102 if compression not in encode:
--> 103 raise ValueError('Compression filter "%s" is unavailable' % compression)
104
105 if compression == 'gzip':
ValueError: Compression filter "gzip" is unavailable
У кого-нибудь есть опыт в этом? Установка библиотеки HDF5, а также пакета h5py не пошла не так...
dset
среди названий наборов данных, перечисленныхgrp.keys()
? У вас есть образец файла, который вы можете разместить где-нибудь, чтобы мы могли его увидеть? Также рассмотрите возможность выполненияh5ls thefile
в командной строке и посмотрите, что это покажет. - person John Zwinck   schedule 10.10.2014print geno["matrix"]
? - person Yossarian   schedule 11.10.2014h5ls
выводит список двух групп в файле. @Yossarian Вывод толькоprint geno["matrix"]
равен<HDF5 dataset "matrix": shape (1008, 11623), type "|u1">
. - person Lilith-Elina   schedule 13.10.2014