kitsune_breeze, я просмотрел вопросы и ответы и комментарии. Есть несколько областей, которые необходимо уточнить. Давайте начнем с внешних ссылок против ссылок на объекты или области . Насколько я понимаю, вы хотите создать набор данных (он же массив) из внешних ссылок (каждая ссылка ссылается на отдельный файл HDF5).
В ответе Махсы Хассанкаши 19 апреля описывается как создать набор данных dtype=h5py.ref_dtype
или dtype=h5py.regionref_dtype
. Первая - это ссылка на объект, а вторая - ссылка на регион. Они не такие, как внешние ссылки! Кроме того, пример кода требует h5py 2.10.0
, и вы используете h5py 2.9.0.
. (К вашему сведению, в 2.9.0 есть решение этой проблемы, если вы решите использовать ссылки на объекты или регионы.)
Вот плохие новости: на основании моих тестов вы не можете создать набор данных (или np массив) внешних ссылок HDF5. Вот шаги, чтобы понять почему:
In [1]: import h5py
In [2]: h5fw = h5py.File('SO_61290760.h5',mode='w')
# create an external link object
In [3]: link_obj = h5py.ExternalLink('file1.h5','/')
In [4]: type(link_obj)
Out[4]: h5py._hl.group.ExternalLink
In [5]: link_dtype = type(link_obj)
In [6]: h5fw.create_dataset("MyRefs", (10,), dtype=link_dtype)
Traceback (most recent call last):
...
TypeError: Object dtype dtype('O') has no native HDF5 equivalent
Читая документацию h5py, кажется, что ссылки на объекты и регионы также являются dtype('O')
типами данных, и для их реализации требуются дополнительные метаданные. Там нет упоминания, что это было сделано для внешних ссылок. В результате я не думаю, что вы можете создать массив внешних ссылок (потому что нет dtype для их поддержки).
Тем не менее, вы все равно можете создавать внешние ссылки из 1 файла HDF5 для несколько файлов HDF5. У меня есть простой пример (см. Метод 1: Создание внешних ссылок).
Как объединить несколько файлов .h5?
Если вы решили использовать ссылки на объекты или области , вам нужно использовать другую спецификацию dtype в h5py 2.9.0.
Ссылка на объект :
2.10.0 use: h5py.ref_dtype
2.9.0 use: h5py.special_dtype(ref=h5py.Reference)
Ссылка на регион :
2.10.0 использование: h5py.regionref_dtype
2.9.0 использование: h5py.special_dtype(ref=h5py.RegionReference)
Код ниже демонстрирует поведение в 2.9.0:
In [9]: type(h5py.ref_dtype)
Traceback (most recent call last):
...
AttributeError: module 'h5py' has no attribute 'ref_dtype'
In [10]: type(h5py.special_dtype(ref=h5py.Reference))
Out[10]: numpy.dtype
In [11]: type(h5py.regionref_dtype)
Traceback (most recent call last):
...
AttributeError: module 'h5py' has no attribute 'regionref_dtype'
In [12]: type(h5py.special_dtype(ref=h5py.RegionReference))
Out[12]: numpy.dtype
In [13]: dset = h5fw.create_dataset("MyRefs", (10,), dtype=h5py.special_dtype(ref=h5py.Reference))
In [14]: dset.dtype
Out[14]: dtype('O')