The*_*Cat 0 python types numpy cython
我试图在Cython中为Python编写一个运行长度编码算术库.下面你会看到声明和算法热循环的重要部分是如何看的.它有两个地方有很多和中等的Python交互,第73-74行和第77行.为重度Python交互部分生成的C代码最后显示在一张图片中.我只会询问如何在这里解决73-74,因为我认为77的修复程序是相似的.
正如您所看到的,在生成的C代码中有1)很多类型转换,2)它使用richcompare和3)getitemint.我不明白为什么:1)类型应该是相同的,2)比较应该可以在C级别,因为他们只是比较相同类型的数字和3)getitem应该是多余的,因为你只是查找一个C数组中的索引.
如何解决这个问题以优化我的代码?numpy数组声明创建Python对象的问题是否需要以某种方式指向它们?
在这里,您可以看到为我的热循环中的两个黑暗和淡黄色位置生成的C代码Cython:
您尚未键入nvs或nrs因此将它们视为Python对象(因此nv必须转换为Python对象进行比较).
做:
cdef long[:] nrs = np.zeros( # ... as before
cdef double[:] nvs = np.zeros( # ... as before
Run Code Online (Sandbox Code Playgroud)
(另外,虽然html的图像很有帮助,但如果你将代码也包含在文本中,它会更容易阅读...)
| 归档时间: |
|
| 查看次数: |
198 次 |
| 最近记录: |