【发布时间】:2018-09-17 20:26:22
【问题描述】:
我正在尝试在 Cython 中为 Python 编写一个运行长度编码算术库。下面你会看到声明和算法热循环的重要部分的外观。它有两个地方,Python 交互较多和中等,第 73-74 行和第 77 行。为重度 Python 交互部分生成的 C 代码显示在最后的图片中。我只会在这里询问如何解决 73-74,因为我认为 77 的修复将是类似的。
如您所见,1) 生成的 C 代码中有很多类型转换,2) 它使用 Richcompare 和 3) getitemint。我不明白为什么:1)类型应该相同,2)比较应该可以在 C 级别进行,因为它们只是比较相同类型的数字,3)getitem 应该是多余的,因为你只是在查找一个C 数组中的索引。
如何解决这个问题以优化我的代码?问题是 numpy 数组声明创建 Python 对象并且我需要以某种方式给它们一个指针吗?
在这里你可以看到 Cython 为我的热循环中的两个深黄色和浅黄色的地方生成的 C 代码:
【问题讨论】: