Возможно ли разрезать набор данных h5py в двух подмножествах, не загружая их в память? Например .:h5py: набор данных для резки без загрузки в память
dset = h5py.File("/2tbhd/tst.h5py","r")
X_train = dset['X'][:N/2]
X_test = dset['X'][N/2:-1]
Возможно ли разрезать набор данных h5py в двух подмножествах, не загружая их в память? Например .:h5py: набор данных для резки без загрузки в память
dset = h5py.File("/2tbhd/tst.h5py","r")
X_train = dset['X'][:N/2]
X_test = dset['X'][N/2:-1]
No.
Вам нужно будет реализовать свой собственный класс, чтобы действовать в качестве вида на наборе данных. An old thread в списке рассылки h5py указывает на то, что такой класс DatasetView
теоретически можно реализовать с использованием типов данных HDF5, но, вероятно, не стоит для многих случаев использования. Элементный доступ был бы очень медленным по сравнению с обычным массивом numpy (предполагая, что вы можете поместить свои данные в память).
Редактировать: Если вы хотите избежать беспорядка с пространством данных HDF5 (что бы это ни значило), вы можете согласиться на более простой подход. Попробуйте this gist Я только что написал. Используйте его следующим образом:
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)
Что случилось с кодом, который вы опубликовали? –
Код, который он отправил, мгновенно загрузит эти точки данных в память. Он хочет передать две ссылки на две половины своих данных, не проходя вокруг больших массивов. –
Я не знаю, как это сделать. Сначала я думал, что ссылки на регион могут быть как-то то, что вам нужно, но, насколько я могу судить, это не ответ. –