gpt4 book ai didi

python - 就地改组多个 HDF5 数据集

转载 作者:太空狗 更新时间:2023-10-30 00:14:04 25 4
gpt4 key购买 nike

我将多个 HDF5 数据集保存在同一个文件 my_file.h5 中。这些数据集具有不同的维度,但在第一个维度中的观察数量相同:

features.shape = (1000000, 24, 7, 1)
labels.shape = (1000000)
info.shape = (1000000, 4)

重要的是信息/标签数据正确连接到每组特征,因此我想用相同的种子打乱这些数据集。此外,我想在不将它们完全加载到内存中的情况下洗牌。这可能使用 numpy 和 h5py 吗?

最佳答案

在磁盘上打乱数组非常耗时,因为这意味着您已在 hdf5 文件中分配新数组,然后以不同的顺序复制所有行。如果你想避免使用 PyTables 或 h5py 一次将所有数据加载到内存中,你可以遍历行(或使用行 block )。

另一种方法可能是保持数据原样,并简单地将新行号映射到单独数组中的旧行号(这样您可以在 RAM 中保持完全加载,因为它只有 4MB 与您的数组大小).例如,打乱一个 numpy 数组 x,

x = np.random.rand(5)
idx_map = numpy.arange(x.shape[0])
numpy.random.shuffle(idx_map)

然后你可以使用advanced numpy indexing访问您的随机数据,

x[idx_map[2]] # equivalent to x_shuffled[2]
x[idx_map] # equivament to x_shuffled[:], etc.

这也适用于保存到 hdf5 的数组。与在磁盘上写入混洗数组相比,当然会有一些开销,但根据您的用例,这可能就足够了。

关于python - 就地改组多个 HDF5 数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30977494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com