使用Sklearn上的Cython

时间:2016-07-25 17:59:35

标签: scikit-learn cython

这可能是一个简单的问题,但我在将_splitter.pyx构建到_splitter.so时遇到了一些麻烦(所以我可以尝试一些改变)。现在我正尝试使用以下命令构建原始文件:

  

cython -a _splitter.pyx

它会产生以下错误:

  

编译Cython文件时出错:

     

...                                            self.index_to_samples,                                            self.feature_values,                                            end_negative,start_positive)

     

cdef int compare_SIZE_t(const void * a,const void * b)nogil:

     

^

     

_splitter.pyx:1008:34:预期')',找到' *'

我尝试了一些改动:

  

cython -3 _splitter.pyx

  

cython -a _splitter.pyx _splitter.pxd

但它只会产生更多错误。难道我做错了什么?

当它修复后,我打算使用命令:

  

gcc -shared -pthread -fPIC -fwrapv -O2 -Wall -fno-strict-aliasing -I / usr / include / python2.7 -o _splitter.so _splitter.c

这是正确的方法吗?

非常感谢您的帮助

编辑: 将我的Cython升级到0.24版本。现在我在几行中得到以下错误:

  

编译Cython文件时出错:

     

...                      特征[f_i],特征[f_j] =特征[f_j],特征[f_i]

     

#绘制随机阈值   current.threshold = rand_uniform(min_feature_value,   max_feature_value,   random_state)

     

^

     

_splitter.pyx:1547:65:在没有gil的情况下不允许转换为Python对象

1 个答案:

答案 0 :(得分:1)

尝试升级Cython安装。旧版本(< 0.18)不支持const关键字。

请参阅how do I use const

  

答案:从Cython 0.18开始,您可以在代码中使用它   你的声明。

     

早期版本的Cython不直接支持const并且是必需的   以下hack将其编译成C源代码: