【问题标题】:Call cdef function in cython cell magic在 cython 细胞魔术中调用 cdef 函数
【发布时间】:2014-11-07 13:18:32
【问题描述】:

我有一个 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'

我在这里做错了什么?

【问题讨论】:

    标签: python ipython cython


    【解决方案1】:

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

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

    【讨论】:

    • 完美。只是我失踪了。有什么聪明的方法可以创建这些pxd 文件还是手动工作?
    • @LondonRob 我不知道有任何自动化方法可以做到这一点。真正需要的只是复制要导出的函数签名。如果 pyx 文件不是太疯狂,您可能可以编写一个简单的脚本来为您完成它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多