2012-09-27 35 views
15

背景:私はちょうどscikit-learnを使い始めていますが、joblib, versus pickleについてはページの下部にあります。joblibとpickleの使い方の違いは何ですか?

ビッグデータに、より効率的である漬物のJOBLIBの交換(joblib.dump & joblib.load)を、使用することがより面白いかもしれませんが、可能なディスクへの唯一のピクルスはなく、文字列へ

私はピックルの Common use-cases for pickle in PythonのAを読んでいます。ここのコミュニティがjoblibとpickleの違いを分かち合うのだろうか?いつ他のものを使い分けるべきですか?

答えて

18

numlpyのデータ構造の配列バッファを特別に扱うため、joblibは大規模なnumpy配列の方がはるかに高速です。実装の詳細については、source codeをご覧ください。また、zlibを使用して酸洗する間にそのデータを圧縮することもできます。

joblibは、プロセス間でメモリを共有できるようにするために、ロードされるときに非圧縮のジョブリボンで漬けられたnumpy配列のデータバッファをメモリマップすることも可能にします。

+0

ありがとう!これは参考になります。 – msunbot

1

このJOBLIBによる

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 

ではcPickleのより良い作品私は同じ質問に出くわしたので、私は大規模な漬物ファイルをロードする必要があるように私は

#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 

このため出力を、このいずれかを試してみましたこれらの3つのモジュールからPickleモジュールを選択します。おかげで

+1

私はcpickleがpickleより速くすべきだと思いましたか? – Echo

+0

このベンチマークは、デフォルトでpickle(プロトコル= 3)を使用するpython 3(これはpython2のデフォルトより速い)で行われますか? – LearnOPhile

+0

これはpython 2.7で行われました – Gunjan

関連する問題