Python实现了对不规则数组的高效访问

2024-06-02 19:31:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个很大的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/预测”、“1/预测”…,但如果有合理的替代方案,我不希望必须转换这些数据。你知道吗

谢谢你, 玛丽


Tags: of数据内存numpy类型np数组special