以交互方式使用编译的代码¶
本节将介绍如何在Sage中使用编译后的代码。然而,由于Sage是在Python之上构建的,因此这一点通常对Python有效。例外情况是,这些笔记假定您使用的是Sage的f2py接口,这使得以交互方式使用f2py更加方便。您应该查看f2py网站以获取有关使用命令行f2py工具的信息。Ctype示例可以在任何最新的Python安装中使用。如果您使用的是Sage,那么ctype和f2py都已经存在了。
首先,我们为什么要编写编译后的代码?显然,因为它的速度非常快,远远快于解释的Python代码。Sage拥有非常强大的工具,允许用户交互地调用用C或Fortran编写的编译代码。事实上,有2-4种方法可以做到这一点,具体取决于你想要实现的目标。一种方法是使用Cython。Cython是一种基于Pyrex的C和Python的混合语言。它具有调用外部共享对象库的能力,并且对于编写Python扩展模块非常有用。在Sage文档的其他地方详细介绍了Cython/Pyrex。
假设您真的只想编写Python代码,但是有一些特别耗时的代码片段,您希望用C/Fortran编写或简单地调用外部共享库来完成。在这种情况下,您有三个不同优势和劣势的选择。
请注意,在尝试使用编译代码来加速瓶颈之前,请确保没有更简单的方法。特别是,首先尝试向量化,即将您算法表示为向量或数值数组上的算术。这些算术运算是直接在C中完成的,所以速度会非常快。如果您的问题不适合用矢量化的形式来表达,请继续阅读。
在我们开始之前,让我们注意到,这绝不是对我们讨论的任何程序的完整介绍。这更多的是为了引导你了解什么是可能的,以及不同的选择会是什么感觉。