我在同一个文件my_file.h5
中保存了多个HDF5数据集。这些数据集具有不同的维度,但在第一个维度中的观察数相同:
features.shape = (1000000, 24, 7, 1)
labels.shape = (1000000)
info.shape = (1000000, 4)
重要的是,信息/标签数据必须正确连接到每组功能,因此我想使用相同的种子对这些数据集进行混洗。此外,我想在不将它们完全加载到内存中的情况下对其进行改组。可以使用numpy和h5py吗?
最佳答案
像这样在numpy
中改组数组很简单
创建大的改编索引(shuffle np.arange(1000000)
)并索引数组
features = features[I, ...]
labels = labels[I]
info = info[I, :]
这不是就地操作。
labels[I]
是labels
的副本,而不是切片或 View 。替代
features[I,...] = features
在表面上看起来像是就地操作。我怀疑是在C代码中。它必须被缓冲,因为
I
的值不能保证是唯一的。实际上,有一种特殊的ufunc
.at
方法用于无缓冲操作。但是,看看
h5py
对这种“花式索引”的看法:http://docs.h5py.org/en/latest/high/dataset.html#fancy-indexing
labels[I]
选择已实现,但有限制。List selections may not be empty
Selection coordinates must be given in increasing order
Duplicate selections are ignored
Very long lists (> 1000 elements) may produce poor performance
根据定义,混洗的
I
的排列顺序不是递增的。而且非常大。我也没有看到关于在左手边使用这个华丽的索引
labels[I] = ...
的任何信息。关于python - 就地改组多个HDF5数据集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30977494/