我有一个很大的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',...,但是如果有合理的选择,我希望不必将其转换。
谢谢你, 玛丽