我有一个用cython
编写的类或扩展类型,如下所示:
cdef class Self_Organized_Map:
cdef
def __cinit__(self,np.ndarray data,.....):
....
我使用cython
从这个som.pyx
文件(其名称为distutils
)创建了一个python模块,然后我将其导入python
并用它来创建和训练一个模型,但是当我想用pickle
保存我的模型时,它给了我这个错误:
TypeError:无法pickle som.Self_Organized_Map对象
pickle或我的代码出了什么问题? pickle不能保存扩展对象吗?
答案 0 :(得分:2)
自Cython 0。26(2017年7月发布)以来,cdef类可以自动进行pickle,只要它们不包含指针或联合。对于包含结构的类,可以使用@cython.auto_pickle(True)
装饰器启用自动修剪。默认情况下,由于代码开销较高而导致其他原因被禁用。
可以在changelog和the website of Stefan Behnel上找到更多信息。