有效压缩混合类型的numpy数组

时间:2019-03-29 12:57:58

标签: python numpy multidimensional-array storage

我需要一种使用具有混合(异构)dtypes的numpy数组有效存储(大小和读取速度)数据的方法。想象一个具有100M观测值的数据集,每个观测值有5个变量(其中3个是int32,两个是float32)。

我当前正在将数据存储在两个gzip压缩的.npy文件中,一个用于ints,一个用于float:

import numpy as np
import gzip as gz

with gz.open('array_ints.npy.gz', 'wb') as fObj:
    np.save(fObj, int_ndarray)

with gz.open('array_floats.npy.gz', 'wb') as fObj:
    np.save(fObj, flt_ndarray)

我也尝试过将数据存储为结构化数组,但是最终文件的大小大约比分别存储int和float的组合大小大25%。我的数据正在扩展到TBs范围,因此我正在寻找最有效的存储方式(但我想避免将压缩算法更改为LZMA之类的东西)。

还有另一种方式可以将不同的数据类型有效地存储在一起,以便我可以同时读取两者吗?我开始研究HD5,但不确定是否有帮助。

编辑:
最终,我最终选择了h5py沿着HD5路线走下去。相对于gzip压缩的.npy数组,使用h5py我实际上看到大小减少了25%。但是,这可以归因于混洗过滤器。但是,将两个数组保存在同一文件中时,相对于保存单个文件,实际上没有任何开销。

我意识到最初的问题过于笼统,如果没有具体的数据格式和代表性样本(我无法真正透露),就无法给出足够的答案。因此,我要解决的问题。

0 个答案:

没有答案