超越Python

这是与包含用Python以外的语言编写的代码相关的一些想法的小集合。目前,对于Python以外的语言,我们有额外文档的唯一选项是 Cython

我可以使用Python以外的编程语言来加速我的代码吗?

是。本网站中使用的语言有Python、Cython、Pythran、C、C++和Fortran。所有这些都各有利弊。如果Python确实不能提供足够的性能,可以使用这些语言中的一种。使用编译语言时的重要问题是可维护性和可移植性。在可维护性方面,Pythran和Cython比C/C++/Fortran更受欢迎。Cython、C和C++比Fortran更可移植。SciPy中的许多现有Fortran代码都是较旧的、经过战斗测试的代码,它们只包装在Python/SciPy中(但不是专门为Python/SciPy编写的)。

我们的基本建议是:使用Pythran或Cython来加速较小的代码段。在Pythran或Cython不再够用的情况下,首选C或C++。如果首选Fortran有特定原因,请先讨论这些原因。

我可以用Numba吗?

还没有,但我们正在为将来考虑。可以编写采用由Numba生成的用户定义函数的代码,请参见 扩展 scipy.ndimage 在C中

How do I debug code written in C/C++/Fortran inside SciPy?

要做到这一点,最简单的方法是首先编写一个Python脚本,该脚本调用您想要调试其执行的C代码。例如 mytest.py ::

from scipy.special import hyp2f1
print(hyp2f1(5.0, 1.0, -1.8, 0.95))

现在,您可以运行::

gdb --args python runtests.py -g --python mytest.py

如果以前没有启用调试符号进行编译,请移除 build 首先是目录。在调试器中时::

(gdb) break cephes_hyp2f1
(gdb) run

现在,执行将在相应的C函数处停止,您可以像往常一样逐步执行它。而不是平淡无奇 gdb 当然,您可以使用您最喜欢的替代调试器;在 python 带参数的二进制文件 runtests.py -g --python mytest.py