缓慢加载大型NumPy数据集

时间:2017-05-18 16:03:04

标签: python arrays numpy ordereddictionary

我注意到.npy文件的加载时间很长(~10分钟),对于1D numpy对象数据类型数组,长度为~10000。此数组中的每个元素都是有序字典(OrderedDict,来自集合包的字典子类),长度为~5000。那么,我怎样才能有效地保存和加载大型NumPy阵列到磁盘和从磁盘加载?传统上如何处理Python中的大型数据集?




2 个答案:

答案 0 :(得分:2)

Numpy会默认腌制嵌入的对象(你可以避免使用allow_pickle=False,但听起来可能需要它),这很慢(参见https://docs.scipy.org/doc/numpy/reference/generated/numpy.save.html)。 您可能需要检查Pandas(请参阅http://matthewrocklin.com/blog/work/2015/03/16/Fast-Serialization)或尝试提供自己的文件格式,以避免挑选复杂的数据结构。

答案 1 :(得分:0)

将大型数据集保存到磁盘或从磁盘加载大型数据集始终是一项代价高昂的操作。一种可能的优化是使用内存映射到磁盘并直接在阵列上工作(如果这与您的应用程序兼容),特别是如果您只对数据集的一小部分感兴趣。这就是numpy.memmap的作用。

例如:

LogOutput

这将创建一个1000000 int32的numpy数组'a'。它可以作为任何“普通”numpy数组处理。这还会在磁盘上创建相应的文件'largeArray',其中包含'a'中的数据。 'a'和'largeArray'之间的同步由numpy处理,这取决于你的RAM大小。

更多信息here