2012-09-27 36 views
15

Antecedentes: Estoy empezando con scikit-learn y leo en la parte inferior de la página sobre joblib, versus pickle.¿Cuáles son los diferentes casos de uso de joblib versus pickle?

puede ser más interesante utilizar el reemplazo de JOBLIB de salmuera (joblib.dump & joblib.load), que es más eficiente en grandes volúmenes de datos, pero sólo puede pepinillo en el disco y no a una cadena

He leído esto Q & A en Pickle, Common use-cases for pickle in Python y me pregunto si la comunidad aquí puede compartir las diferencias entre joblib y pickle? ¿Cuándo debería uno usar uno sobre otro?

Respuesta

18

joblib suele ser significativamente más rápido en grandes matrices numpy porque tiene un manejo especial para los almacenamientos intermedios de matriz de la estructura de datos numpy. Para conocer los detalles de implementación, puede echar un vistazo al source code. También puede comprimir esos datos sobre la marcha mientras se decapa usando zlib.

joblib también permite mapear la memoria del búfer de datos de una matriz numpy recortada joblib sin comprimir al cargarla, lo que permite compartir memoria entre procesos.

+0

¡Muchas gracias! Esto es útil. – msunbot

1

me encontré con la misma pregunta, así que traté de este, ya que tengo que cargar un archivo de salmuera gran

#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 

salida para esto es

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 

De acuerdo con esta JOBLIB funciona mejor que cPickle y el módulo Pickle de estos 3 módulos. Gracias

+1

Pensé que cpickle debería ser más rápido que pickle? – Echo

+0

¿Este punto de referencia está hecho con Python 3, que usa pickle (protocolo = 3) de forma predeterminada (que es más rápido que el predeterminado en python2)? – LearnOPhile

+0

Esto se hizo con Python 2.7 – Gunjan

Cuestiones relacionadas