2012-09-27 59 views
15

背景:我刚刚开始使用scikit-learn,并在页面底部阅读有关joblib, versus pickle的信息。joblib和pickle有什么不同的用例?

可能更有趣的使用JOBLIB的替代泡菜(joblib.dump & joblib.load),这是对大数据更有效,但只能咸菜到磁盘,而不是一个字符串

我读过这个Q & A在Pickle上, Common use-cases for pickle in Python并想知道这里的社区是否可以分享joblib和pickle之间的区别?什么时候应该一个人使用另一个?

回答

18

joblib通常在大型numpy数组上显着更快,因为它对numpy数据结构的数组缓冲区有特殊的处理。要查找实施细节,您可以查看source code。它还可以在使用zlib进行酸洗时实时压缩数据。

joblib还可以在加载它时使内存映射未压缩的joblib-pickled numpy数组的数据缓冲区,这使得可以在进程之间共享内存。

+0

非常感谢!这很有帮助。 – msunbot

1

我遇到了同样的问题,所以我想这一个,因为我需要装载大量泡菜文件

#comapare pickle loaders 
from time import time 
import pickle 
import os 
try: 
    import cPickle 
except: 
    print "Cannot import cPickle" 
import joblib 

t1 = time() 
lis = [] 
d = pickle.load(open("classi.pickle","r")) 
print "time for loading file size with pickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1 

t1 = time() 
cPickle.load(open("classi.pickle","r")) 
print "time for loading file size with cpickle", os.path.getsize("classi.pickle"),"KB =>", time()-t1 

t1 = time() 
joblib.load("classi.pickle") 
print "time for loading file size joblib", os.path.getsize("classi.pickle"),"KB =>", time()-t1 

输出这是

time for loading file size with pickle 1154320653 KB => 6.75876188278 
time for loading file size with cpickle 1154320653 KB => 52.6876490116 
time for loading file size joblib 1154320653 KB => 6.27503800392 

根据这一JOBLIB作品比cPickle的更好和来自这3个模块的Pickle模块。谢谢

+1

我以为cpickle应该比咸菜快吗? – Echo

+0

这个基准测试用python 3完成,默认情况下它使用pickle(protocol = 3)(它比python2中的默认值更快)? – LearnOPhile

+0

这是用python 2.7完成的 – Gunjan

相关问题