【发布时间】:2013-03-31 15:51:21
【问题描述】:
我正在研究一个理论图论问题,该问题涉及在超图中采用超边的组合来分析各种情况。
我已经在 Python 中实现了主要算法的初始版本,但是由于它的组合结构(可能还有我的实现),该算法非常慢。
我正在考虑加快速度的一种方法是使用 PyPy 或 Cython。
查看文档似乎 Cython 在元组方面并没有提供很大的加速。这对于实现来说可能是有问题的,因为我将超边表示为元组 - 所以算法的大部分是在处理元组(但是它们的长度都相同,每个大约 len 6)。
由于我的 C 和 Python 技能都非常低,如果有人能建议在代码依赖元组/列表的情况下进行优化的最佳方法是什么,我将不胜感激。是否有使用 Cython(或 PyPy)的列表/元组的文档?
【问题讨论】:
-
你能发布你的代码并突出显示速度慢的部分吗?不看代码就很难提出改进建议,因为问题可能不是你想的那样。 一般而言,提高速度的最佳答案是考虑更好的算法...
-
Cython 可以使用 C 数组和结构,并允许您定义扩展类型。其中任何一个都可以替代元组。
-
@Roland,算法实际上是NP(它与超图中的匹配有关),所以我不能指望比我已经实现的算法更优化。但是,我只对一个非常具体的案例感兴趣。我根据我在 Python 中幼稚实现的运行时间估计,如果我可以让它运行速度快 100 倍,那么它会在可接受的时间内完成(大约 2 周)。
-
谢谢 Janne,你有任何关于如何通过 cython 将 c 数组包含到 python 代码中的示例或指针(请原谅双关语!)?
-
@nsimplex:您能展示一下代码吗,我们可以提出改进建议吗?有一些标准技巧可以提供帮助,例如用推导替换循环,以及用空间换时间......
标签: python list tuples cython pypy