交互式地使用编译的代码

本节介绍在Sage中使用编译代码。但是,由于Sage是在Python之上构建的,所以对于Python来说,这大部分都是有效的。例外的是,这些注释假设您使用的是Sage的f2py接口,这使得以交互方式使用f2py更加方便。您应该在f2py网站上查看有关使用命令行f2py工具的信息。ctypes示例可以在最近的任何Python安装中使用。如果您使用的是Sage,那么ctypes和f2py都已经存在了。

首先,我们为什么要编写编译代码?显然,因为它的速度快,远远快于解释过的Python代码。Sage有非常强大的工具,可以交互调用用C或Fortran编写的编译代码。事实上,有2-4种方法可以做到这一点,这取决于你到底想完成什么。一种方法是使用Cython。Cython是一种基于Pyrex的C和Python的混合语言。它能够调用外部共享对象库,对于编写Python扩展模块非常有用。Cython/Pyrex在Sage文档的其他地方有详细介绍。

假设您真的只想编写Python代码,但是您希望用C/Fortran编写一些特别耗时的代码,或者直接调用外部共享库来完成。在这种情况下,你有三种选择,各有优缺点。

请注意,在尝试使用编译的代码来加速瓶颈之前,请确保没有更简单的方法。特别是,首先尝试向量化,即将算法表示为向量或numpy数组上的算术。这些算术运算是直接在C语言中完成的,因此速度非常快。如果你的问题不适合用矢量化的形式来表达,他们就继续读下去。

在开始之前,让我们注意到,这绝不是我们讨论的任何程序的完整介绍。这更意味着让你知道什么是可能的,不同的选择会是什么感觉。