Создайте простой h5 с группой и добавьте к нему несколько attrs
:
In [2]: f = h5py.File('testattr.h5','w')
In [3]: g = f.create_group('test')
In [4]: g.attrs
Out[4]: <Attributes of HDF5 object at 139650561822480>
In [5]: g.attrs['var1'] = 'foobar'
In [6]: g.attrs['var2'] = 23
In [7]: g.attrs['var3'] = np.arange(24).reshape(2,3,4)
In [8]: g.attrs['var4'] = np.pi
Получите itemsview
, а затем загрузите с помощью list
(или dict
):
In [9]: g.attrs.items()
Out[9]: ItemsViewHDF5(<Attributes of HDF5 object at 139650561822480>)
In [10]: list(g.attrs.items())
Out[10]:
[('var1', 'foobar'),
('var2', 23),
('var3', array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])),
('var4', 3.141592653589793)]
Получение средства просмотра тривиально по времени :, но на самом деле загрузка данных в список или dict требует времени - фактический формат не имеет значения:
In [11]: timeit g.attrs.items()
4.7 µs ± 177 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
In [13]: timeit list(g.attrs.items())
273 µs ± 2.71 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [15]: timeit dict(g.attrs.items())
272 µs ± 287 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Добавление другого атрибута (относительно большого), немного увеличивает время загрузки:
In [26]: g.attrs['var5'] = np.random.rand(1000)
In [29]: timeit list(g.attrs.values())
337 µs ± 633 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
Сравните это с использованием набора данных:
In [30]: g.create_dataset('oned', data=np.random.rand(1000))
Out[30]: <HDF5 dataset "oned": shape (1000,), type "<f8">
In [31]: f.flush()
In [32]: g['oned']
Out[32]: <HDF5 dataset "oned": shape (1000,), type "<f8">
In [33]: g['oned'][:];
In [34]: timeit g['oned']
64.4 µs ± 143 ns per loop (mean ± std. dev. of 7 runs, 10000 loops each)
In [35]: timeit g['oned'][:]
239 µs ± 188 ns per loop (mean ± std. dev. of 7 runs, 1000 loops each)
In [36]: ds = g['oned']
In [37]: timeit ds[:]
151 µs ± 2.73 µs per loop (mean ± std. dev. of 7 runs, 10000 loops each)