在cython cell magic中调用cdef函数

时间:2014-11-07 13:18:33

标签: python ipython cython

我将cython模块保存为foo.pyx,如下所示:

cdef double sum(double[:] memview):
    cdef total = 0
    for i in range(len(memview):
        total += memview[i]
    return total

然后我用!cython -a foo.pyx编译。

我想在cython单元格魔法中测试此函数,如下所示:

  In [1]: %%cython
     ...: import foo
     ...: cimport numpy as np
     ...: import numpy as np
     ...: def get_sum():
     ...:     cdef double[:] to_sum = np.array([1.0,2.0,3.0])
     ...:     cdef double sum = foo.sum(to_sum)
     ...:     return sum

但是当我尝试get_sum()时,我得到了:

AttributeError: 'module' object has no attribute 'sum'

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

要使这项工作,你需要cimport cython模块。 这将需要一个相应的pxd,其中包含您希望从模块中导出的函数签名。 有关完整的工作示例,请参阅documentation的相关部分。

这假设您的文件都在同一个工作目录中。 否则,您将需要在setup.py文件中为不同模块包含传递给include_dirs类构造函数的Extension参数中包含pyx和pxd文件的相关文件夹的相关文件夹。< / p>