2012-09-27 8 views
15

Hintergrund: Ich beginne gerade mit scikit-learn und lese am Ende der Seite über joblib, versus pickle.Was sind die verschiedenen Anwendungsfälle von Joblib gegen Gurke?

kann es interessanter sein JOBLIB Nachfolger von Gurke (joblib.dump & joblib.load) zu verwenden, die effizienten auf große Datenmengen, sondern kann nur Beize auf die Festplatte und nicht auf einen String

Ich lese dieses Q & A auf Essiggurke, Common use-cases for pickle in Python und wundere mich, wenn die Gemeinschaft hier die Unterschiede zwischen joblib und Essiggurke teilen kann? Wann sollte man einen über den anderen benutzen?

Antwort

18

joblib ist normalerweise bei großen numpigen Arrays wesentlich schneller, weil es eine spezielle Handhabung für die Array-Puffer der numpigen Datenstruktur hat. Um über die Implementierungsdetails zu erfahren, können Sie sich die source code ansehen. Es kann diese Daten während des Beizens mit zlib auch dynamisch komprimieren.

Joblib macht es auch möglich, den Datenpuffer eines unkomprimierten Joblib-gebeizten numpy-Arrays beim Laden zu mappen, was es ermöglicht, Speicher zwischen Prozessen zu teilen.

+0

Vielen Dank! Dies ist hilfreich. – msunbot

1

ich auf gleiche Frage kam, so habe ich versucht, diese als ich eine große Gurke Datei laden müssen

#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 

Ausgang hierfür ist

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 

Nach diesem JOBLIB funktioniert besser als cPickle und Pickle-Modul aus diesen 3 Modulen. Danke

+1

Ich dachte, cpickle sollte schneller sein als Gurke? – Echo

+0

Wird dieser Benchmark mit Python 3 durchgeführt, das standardmäßig pickle (protocol = 3) verwendet (was schneller ist als der Standard in python2)? – LearnOPhile

+0

Dies wurde mit Python 2.7 getan – Gunjan

Verwandte Themen