Python: PyPy: SciPy/卡方分布?
我有一个Python项目,性能对我来说非常重要。老实说,我知道纯Python并不是做这件事的最佳工具,但我还是选择用它,因为我想发布一个非常简单的纯Python版本的研究代码,这样大家可以修改,而不需要设置复杂的环境。(我还有一个用D语言写的替代实现,速度快得多,但修改起来比较困难。)
我一直在用PyPy作为解释器,并推荐给任何使用这段代码的人。这让我得到了不错的速度。后来我决定调整一下算法,需要访问一些SciPy中的函数(我只需要卡方分布的累积分布函数、存活函数和逆累积分布函数)。我尝试在CPython中运行我的代码以访问SciPy,但速度慢得像蜗牛一样。
有人能建议我以下三种中的一种吗:
一个临时的解决方案,让我可以在PyPy中使用SciPy的一些功能。
更好的是,有没有纯Python实现的卡方分布函数,且使用宽松的许可证?
有没有办法对CPython中的瓶颈进行即时编译?我知道Psyco,但它似乎已经不再维护,并且只在32位系统上工作。
1 个回答
SciPy 目前还不能在 PyPy 上运行,不过有一些工作正在进行中,预计很快就能实现。前提是你愿意使用夜间版本,并做一些小调整,以便只使用支持的 numpy 子集(而且这个子集还在快速扩展)。如果你时间紧迫,我建议你可以尝试把 SciPy 的功能移植到 Python 上,这应该相对简单,而且也能正常工作。此外,PyPy 网站上还有一个关于 numpy 的筹款活动,目的是让这个进展更快一些 :)
补充:这是在 PyPy 上运行的 matplotlib,通过嵌入 CPython 实现的:http://baroquesoftware.com/~fijal/extreme_hacks.png
补充2:可以阅读 http://morepypy.blogspot.com/2011/12/plotting-using-matplotlib-from-pypy.html 来获取一个例子。
祝好,
fijal