Use python slice objects when reading HDF5 file with h5py?

Viewed 2410

I am trying to use python slice objects to access data from an HDF5 file using the h5py module. I put together this example to show that it works with numpy arrays, but not with h5py.

import h5py
import numpy as np

slice_obj = [slice(None,3,None), slice(2,5,None)]

test_array = np.ones((3,5))
print test_array[0:3,2:5]
print test_array[slice_obj]

f = h5py.File("testing.hdf5","w")
f['data'] = test_array
f.close()

f = h5py.File("testing.hdf5","r")
test2 = f['data'][0:3,2:5]
print test2
test2 = f['data'][slice_obj]
print test2
f.close()

This gives the following output:

[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]
[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]
[[ 1.  1.  1.]
 [ 1.  1.  1.]
 [ 1.  1.  1.]]
Traceback (most recent call last):
  File "slice.py", line 17, in <module>
    test2 = f['data'][slice_obj]
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/h5py/_hl/dataset.py", line 439, in __getitem__
    self.id.read(mspace, fspace, arr, mtype)
  File "h5d.pyx", line 179, in h5py.h5d.DatasetID.read (h5py/h5d.c:2479)
  File "_proxy.pyx", line 118, in h5py._proxy.dset_rw (h5py/_proxy.c:1300)
  File "_proxy.pyx", line 84, in h5py._proxy.H5PY_H5Dread (h5py/_proxy.c:1051)
IOError: can't read data (Dataset: Read failed)

Does anyone know if this is just not possible with h5py? If it is not, is there an alternative way to slice in h5py, using objects or variables, instead of explicitly typing the slice like f['data'][0:3,2:5] as in my example?

1 Answers
Related