Python h5py:在不加载到内存的情况下切片数据集
是否可以将h5py数据集分为两个子集,而不将它们实际加载到内存中?例如:Python h5py:在不加载到内存的情况下切片数据集,python,numpy,h5py,Python,Numpy,H5py,是否可以将h5py数据集分为两个子集,而不将它们实际加载到内存中?例如: dset = h5py.File("/2tbhd/tst.h5py","r") X_train = dset['X'][:N/2] X_test = dset['X'][N/2:-1] 没有 您需要实现自己的类来充当数据集上的视图。h5py邮件列表上显示,这种DatasetView类理论上可以使用HDF5数据空间实现,但对于许多用例来说可能不值得。与普通的numpy数组相比,按元素进行的访问速度非常慢(假设您可以将数
dset = h5py.File("/2tbhd/tst.h5py","r")
X_train = dset['X'][:N/2]
X_test = dset['X'][N/2:-1]
没有
您需要实现自己的类来充当数据集上的视图。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)
你发布的代码有什么问题?他发布的代码会立即将这些数据点加载到内存中。他想传递对数据两部分的两个引用,而不传递大数组。我不知道怎么做。起初我认为区域引用可能是您所需要的,但据我所知,这不是答案。现在我记得h5py邮件列表上的一条旧线索:@JohnZwinck,正如superbatfish所说,这段代码立即将数据加载到内存中。