h5py:在不加载到内存的情况下切片数据集

2024-04-20 07:26:30 发布

您现在位置:Python中文网/ 问答频道 /正文

有没有可能将h5py数据集分成两个子集,而不实际将它们加载到内存中?E、 g.:

dset = h5py.File("/2tbhd/tst.h5py","r")

X_train = dset['X'][:N/2]
X_test  = dset['X'][N/2:-1]

Tags: 数据内存testtrain子集fileh5pytst
1条回答
网友
1楼 · 发布于 2024-04-20 07:26:30

没有

您需要实现自己的类来充当数据集的视图。^h5py邮件列表上的{a1}表明这样一个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]

请注意,这个简单示例中的切片支持有点有限。如果您想要完整切片和元素级访问,则必须将其复制到实际数组中:

^{pr2}$

相关问题 更多 >