Tengo que guardar y cargar una instancia de clase cython. Mi clase Cython es esto además de varios métodos:pickle cython clase
import numpy as np
cimport numpy as np
cimport cython
cdef class Perceptron_avg_my:
cdef int wlen,freePos
cdef np.ndarray w,wtot,wac,wtotC#np.ndarray[np.int32_t]
cdef np.ndarray wmean #np.ndarray[np.float32_t]
cdef public dict fpos
def __cinit__(self,np.int64_t wlen=4*10**7):
self.fpos= dict()
self.freePos=1
self.wlen=wlen
self.w=np.zeros(wlen,np.int32)
self.wtot=np.zeros(wlen,np.int32)
self.wac=np.zeros(wlen,np.int32)
self.wtotc=np.zeros(wlen,np.int32)
self.wmean=np.zeros(wlen,np.float32)
cpdef evaluate_noavg(self,list f):
cdef np.ndarray[np.int32_t] w = self.w
cdef dict fpos = self.fpos
cdef bytes ff
cdef int i
cdef long int score=0
for ff in f:
i=fpos.get(ff,0)
if i != 0:
score += w[i]
return score
estaba pensando usar el módulo cPickle. entiendo que tengo que poner en práctica un método de (auto) __ __reduce pero tengo algunos problemas para encontrar un ejemplo y para entender bien la documentación
He intentado añadir algo como esto para Perceptron_avg_my pero no las obras:
def rebuild(self,l):
self.fpos=l[0]
self.freePos=l[1]
def __reduce__(self):
#print 'reduce call'
return (Perceptron_avg_my.rebuild,(self.fpos,self.freePos))
alguna sugerencia? Muchas gracias!
útil discusión aquí también: https://ask.sagemath.org/question/8376/pickling-extension-classes/ –