通过pickle保存cython扩展

时间:2017-05-03 13:05:02

标签: python python-3.x cython pickle cythonize

我有一个用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不能保存扩展对象吗?

1 个答案:

答案 0 :(得分:2)

自Cython 0。26(2017年7月发布)以来,cdef类可以自动进行pickle,只要它们不包含指针或联合。对于包含结构的类,可以使用@cython.auto_pickle(True)装饰器启用自动修剪。默认情况下,由于代码开销较高而导致其他原因被禁用。

可以在changelogthe website of Stefan Behnel上找到更多信息。