Можно ли разделить набор данных h5py на два подмножества, фактически не загружая их в память? Например.:
dset = h5py.File("/2tbhd/tst.h5py","r")
X_train = dset['X'][:N/2]
X_test = dset['X'][N/2:-1]
Можно ли разделить набор данных h5py на два подмножества, фактически не загружая их в память? Например.:
dset = h5py.File("/2tbhd/tst.h5py","r")
X_train = dset['X'][:N/2]
X_test = dset['X'][N/2:-1]
No.
Вам нужно будет реализовать свой собственный класс, чтобы действовать как представление набора данных. В старой теме в списке рассылки h5py указано, что такой DatasetView
класс теоретически возможно реализовать с использованием пространств данных HDF5, но, вероятно, не стоит этого во многих случаях использования. Поэлементный доступ будет очень медленным по сравнению с обычным массивом numpy (при условии, что вы можете поместить свои данные в память).
Изменить. Если вы хотите избежать возни с пространствами данных HDF5 (что бы это ни значило), вы можете выбрать более простой подход. Попробуйте эту суть, которую я только что написал. Используйте это так:
dset = h5py.File("/2tbhd/tst.h5py","r")
from simpleview import SimpleView
X_view = SimpleView(dset['X'])
# Stores slices, but doesn't load into memory
X_train = X_view[:N/2]
X_test = X_view[N/2:-1]
# These statements will load the data into memory.
print numpy.sum(X_train)
print numpy.array(X_test)[0]
Обратите внимание, что поддержка нарезки в этом простом примере несколько ограничена. Если вам нужна полная нарезка и поэлементный доступ, вам придется скопировать его в настоящий массив:
X_train_copy = numpy.array(X_train)