Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python h5py:在不加载到内存的情况下切片数据集_Python_Numpy_H5py - Fatal编程技术网

Python 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数组相比,按元素进行的访问速度非常慢(假设您可以将数

是否可以将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数组相比,按元素进行的访问速度非常慢(假设您可以将数据放入内存中)

编辑:如果您想避免干扰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所说,这段代码立即将数据加载到内存中。