1

我有一个大型 h5py 文件,其中包含大型数据集中的几个参差不齐的数组。数组具有以下类型之一:

# Create types of lists of variable length vectors
vardoub = h5py.special_dtype(vlen=np.dtype('double'))
varint = h5py.special_dtype(vlen=np.dtype('int8'))

在一个 HDF5 组 (grp) 中,我创建了 N 个锯齿状项目的数据集,例如:

d = grp.create_dataset("predictions", (N,), dtype=vardoub)

并使用长的 numpy 数组(通常为数亿)填充 d[0], d[1], ..., d[N-1]。

创建这些数组效果很好,我的问题与访问有关。如果我想从其中一个数组中访问一个切片,例如 d[0][5000:6000] 或 d[0][50, 89, 100],那么内存使用量会飙升,我相信它正在读取在阵列的大部分区域;我可以很快看到物理内存使用量从 5-6 GB 上升到 32 GB(机器上的 RAM 大小)。p = d[0] 将整个数组读入内存,所以我认为这正在发生,然后它正在索引它。

有一个更好的方法吗?d[n] 的类型是一个 numpy 数组,我不能引用它。我怀疑我可以重组数据,以便为每个索引设置组,例如'0/predictions'、'1/predictions',...,但如果有合理的情况,我宁愿不必转换它选择。

谢谢你,玛丽

4

0 回答 0