【发布时间】:2017-06-22 10:56:27
【问题描述】:
我在 Ubuntu 16.04 上使用 Python 2.7 和 NumPy 1.11.2,以及最新版本的 dill(我刚刚做了 pip install dill)。
当使用 pickle 存储 NumPy 数组时,我发现 pickle 非常慢,并且存储数组的大小几乎是“必要”大小的三倍。
例如,在以下代码中,pickle 大约慢了 50 倍(1 秒对 50 秒),并创建了一个 2.2GB 而不是 800MB 的文件。
import numpy
import pickle
import dill
B=numpy.random.rand(10000,10000)
with open('dill','wb') as fp:
dill.dump(B,fp)
with open('pickle','wb') as fp:
pickle.dump(B,fp)
我以为莳萝只是泡菜的包装。如果这是真的,有没有办法可以自己提高泡菜的性能?一般不建议对 NumPy 数组使用 pickle 吗?
编辑:使用 Python3,pickle 和 dill 的性能相同
PS:我知道numpy.save,但我在一个框架中工作,我将许多不同的对象存储在一个文件中,所有对象都位于字典中。
【问题讨论】:
-
使用 python 3.6 和 numpy 1.12.1 我得到两个文件的大小相同,你可以尝试升级 numpy
-
@EdChum 升级到 1.13.0 不会改变任何东西。使用 Python3 确实
-
好的,我不知道具体的区别,但看起来这可能是某种只在 python 3 中有效的优化,这很奇怪
-
你知道反对将 dill 用于 numpy 数组的任何论据吗?否则我会选择那个
-
不是真的,我从未使用过
dill,但它似乎是pickle 的扩展,而且您可以保存会话状态,所以它应该可以正常工作。
标签: python numpy serialization pickle dill