将Linux作为一个科学计算平台去进行探索
科学团体中的 Linux
Linux 在科学团体中占有重要地位,这一点也不奇怪。解决方案种类繁多,从高性能计算集群到可视化软件都包含其中。甚至还有一个基于 Red Hat Enterprise Linux 且针对科学计算的完整 Linux 发行版,它被相应地命名为 Scientific Linux。
Sage 和 Enthought Python Distribution
本文介绍使用 Linux 工作站进行科学计算的两种不同方法。第一种方法是 Sage 开源数学系统,第二种方法是 Enthought Python Distribution (EPD)。这两种方法都使用大量核心开源 Python 工具来执行困难的工作。如果您想要尝试这两种方法,可使用 Ubuntu 软件管理器安装各个软件。
在这两种方法中,Sage 更全面一些,因为与其说它是大量不同的基础引擎,不如说它是一个 shell。您甚至可以从 Sage 命令行与 MATLAB 或 Mathematica 等商用产品进行交互。在 Sage 命令提示符下,您实质上是与 IPython 进行交互,从而访问其所有功能。开始探索 Sage 的功能时,您还必须考虑对象和方法。Sage 提供了大量不同的计算机代数系统,以支持用户从命令行与它们进行交互。
值得注意的是,Sage 基于 Python,但在将它传递给 Python 解释器之前,需要对每个语句进行预分析。在查看简单的交互式 Sage 命令时,可能会造成一些混淆。此行为的基本原理是:让在 Sage 中输入命令变得尽可能直观一些。一个好示例是求幂符号。在纯 Python 中,您必须输入 2**4 将二次方提高到四次方。在 Sage 中,则使用向上箭头符号 (^),比如 2^4。与基本 Python 相比,Sage 处理一些操作(整数除法)的方式也不相同。
NumPy 和 SciPy
Sage 和 EDP 的两个最出名的潜在难题是 NumPy 和 SciPy。两个项目都在 90 年代中后期出现,最初由 Travis Oliphant 启动,Travis Oliphant 现在是 Enthought 的一名员工。NumPy 提供核心数值方法来处理数组和矩阵。SciPy 依靠 NumPy 构建其基本数组数据结构,并包含用于处理一切(从线性代数到信息处理)的大量模块。Enthought 是两个项目的发起者,并且仍在继续开发大量新版本。
安装 Sage
安装 Sage 有几种选项可供选择。要查看 Sage,而不是实际安装它,可以使用 live CD 版本。您还可以在 Oracle VM VirtualBox 或 VMware Player 等虚拟机中运行 live CD。本文将介绍如何在运行最新版本的 Ubuntu (12.04) 的物理机和虚拟机上安装 Sage。
物理机
从介质安装 Sage 是启动和运行 Unbuntu 12.04 的最可靠的一种方法,因为最近刚发布了操作系统。请下载源代码 tarball 并将它解压缩到一个合适的目录中。在完成构建之前,还必须安装一些必备软件,您可以使用下列命令完成安装:
sudo apt-get install build-essential gfortran sudo apt-get install texlive xpdf evince sudo apt-get install tk8.5-dev |
安装了必备软件之后,就可以构建 Sage 了,可以使用下列命令启动构建:
make |
此时,可以去看个电影或小睡一下。在典型台式机上,完整的构建过程可能需要几个小时。如果正确构建了一切内容,则应看到类似图 1 的界面。
图 1. Sage 的构建界面
虚拟机
如果您不喜欢冒险,并且只是想要开始使用 Sage,那么在虚拟机上安装 Sage 是一个好选择。可从 Sage 网站上下载 Open Virtualization Archive (OVA) 包,该包随附提供了 Fedora 16 和 Ubuntu 10.04.3 的二进制软件包。OVA 是一个包文件(从本质上讲是一个 tar 文件),包含以 Open Virtualization Format (OVF) 形式启动虚拟机所需的所有文件。
使用 Sage
安装了 Sage 后,就可以开始数学发现和探索之旅。Sage 有一个命令行界面和一个基于 Web 的界面。
命令行界面
要从构建 Sage 的目录启动命令行版本,只需键入下列命令:
./sage |
图 2 显示了一个 Sage 解释器示例和之前所述的一些数学解释。
图 2. Sage 命令行界面和数学解释
整数除法中的差别与 Python 处理运算类型(整数和浮点数等)的方式有关。在 Python 中,表达式 2/3 会分配一个下舍到 0 的整数结果。Sage 将除法运算符视为有理数的构造函数,这意味着您可以用与在纸上计算非常相似的方式执行分数运算。例如,如果在 Sage 提示符处输入 2/3 + 2/3,会得到结果 4/3。如果在 Python 中键入同样的内容,则结果是 0。您可以使用 float() 或 int() 隐式地强制文字类型,如 图 2 所示。
基于 Web 的界面
要使用 Sage Notebook,可以在启动 Sage 后输入 notebook(),或者是使用以下命令:
./sage --notebook |
这会启动 Sage 服务器,并且默认 Web 浏览器会打开 Sage Notebook 主页。您会在笔记本中发现许多促进操作的功能,比如将工作表保存或加载到文件,以及常规的复制、删除和重命名功能。在 图 3 中,Sage 使用 Share 和 Publish 功能来促进协作。
图 3. Sage Notebook 功能
计算机代数软件包
基本 Sage 分发包含许多计算机代数软件包,其中包含 GAP、Maxima、PARI 和 Singular。每个软件包在数学社区中都有自己的关注者,并提供了略有不同的功能。这里的关键是:Sage 在基本分发中包含所有这些软件包,这意味着无需单独下载并安装它们。
图 4 显示了一个使用 Maxima 执行几种矩阵运算的示例。这是使用 Sage Notebook 完成的,它以黑色显示了用户输入,以蓝色显示了输出。前两行使用了等同于 i/j 的条目创建了矩阵,其中 i 和 j 的范围为从 1 到 4。注意,这些是有理数(分数)。
图 4. 使用 Maxima 进行矩阵运算
发表科技论文
发表科技论文是许多教育团体的必要条件。Sage 要求每个对象都有一个 LaTeX 表示。该表示与使用 TeX 语言生成出版品质的图形和文本的需求直接相关。注意,您需要完全安装 TeX 才能利用 Sage 提供的所有功能。
安装 EPD
使用 Python 进行科学计算是 Enthought 公司提供的主要服务。Enthought 的商用产品和支持是付费内容,但是它们仍在很大程度上为开源社区做出了贡献。它们的贡献直接对 NumPy 和 SciPy 代码库起作用,Enthought 在年度 PyCon 会议上展现了它的魅力,并主办了 SciPy 会议。
您可以使用 Ubuntu 软件管理器安装运行 IPython、NumPy 和 SciPy 所需的各种软件,或者是您可以下载并安装免费的 EPD 版本,该版本称为 EPD Free。Enthought 提供 32 位和 64 位版本的 EPD Free,并且已经在 Red Hat、Ubuntu 和 openSUSE 上验证了这些版本。关于此内容的警告是:一些 64 位 Linux 系统部包含 32 位库,因此需要 64 位的软件包版本。
要安装 EPD Free,首先需要下载安装程序脚本,然后使用下列命令运行它:
bash epd_free-7-2-2-rh5-x86.sh |
为了在将来能够便捷地启动 EPD,您需要在 shell 启动脚本(.cshrc 或 .bash_profile)中添加一些代码行。Ubuntu 默认情况下使用的是 bash shell,因此我展示了在 .bash_profile 中添加代码的示例。对于本文,我使用了下列代码行:
export PATH=/home/paul/Downloads/epd_free-7.2-2-rh5-x86_64/bin:$PATH |
使用 EPD
IPython 是 EPD 和 Sage 之间另一种常见的共同特性,并且它是主要用户界面工具。与 Sage 非常类似,EPD 同时安装命令行界面和基于 Web 的笔记本。
命令行界面
基于 Qt 的控制台提供了一些改进的功能,包括使用 Pygments 库完全突出显示语法。它还提供了在内联图中这样做的能力。要获得此功能,可使用下列命令启动 IPython:
ipython --pylab |
图 5 显示了具有嵌入式图的 Qt 控制台。
图 5. 创建新的 PyDev 项目
基于 Web 的界面
最新的 IPython (0.12) 版本包含与 Sage 类似的基于 Web 的笔记本功能。要获得笔记本功能,需要安装几个相关项,包括 ZeroMQ 和 Tornado Web 服务器。要从命令行启动笔记本,请在终端窗口中输入下列命令:
ipython notebook |
这会启动 Tornado Web 引擎并启动打开到仪表板页面的默认 Web 浏览器。如果随后您选择了默认笔记本,则应看到类似 图 6 的新窗口。
图 6. iPython Notebook
与 Web 笔记本的一个不同之处是:当您想执行代码时,需要使用 Control-Enter。这使输入多行代码变为可能,如 图 6 所示,并会按执行顺序在输入框中输入所有内容。因此,可以轻松地将函数分解为多个可管理的块。
可使用 Markdown 语法注释您的笔记本。如果您对 Markdown 不熟悉,那么使用纯文本创建格式化的超文本标记语言 (HTML) 是一种基本方法。例如,空格后面加一个井号符号 (#) 在 HTML 中表示 H1,而两个井号符号表示 H2,以此类推。这允许您添加注释或文档来补充说明代码和图形。
Pandas
Python Data Analysis Library 或 pandas 是连接 SciPy 和 NumPy 的另一种工具,该工具是为了解决数据分析任务而创建的。Pandas 纳入了大量库和一些标准的数据模型,提供了高效地操作大型数据集所需的工具。Comma-separated values (CSV) 文件表示在有关各方之间分发数据的最常见的方法之一。Pandas 提供了一种优化库功能来读写多种文件格式,包括 CSV 和高效的 HDF5 格式。
read_csv 模块了解在第一行中如何使用标头信息解析常见的 CSV 文件。它还了解如何使用内置解析程序处理具有日期或时间的文件。Pandas 包含一个日期工具模块,该模块具有执行各种日期计算的长操作例程列表。清单 1 显示了来自 pandas 文档的代码段,显示了如何查找距离另一个日期四个月零五天的日期:
清单 1. Pandas 日期映射示例
d = datetime(2012, 4, 20) d + pandas.DateOffset(months=4, days=5) datetime.datetime(2012, 8, 25, 0, 0) |
当切割大数据集时,Pandas 非常有用。在将您的数据导入原生数据结构后,有大量工具可供选择,可执行几乎所有类型的操作。可使用标准 Python 切片语法对数据进行切片,对所有或部分数据执行操作,或者是使用 matplotlib 绘制它。如果您需要执行任何数据操作任务,可能会想使用 pandas 加速这一过程。
结束语
毫无疑问,Linux 可支持几乎您让它执行的任何科学计算任务。大多数学术团体都支持它,它快速获得了新行业用户的青睐,这些用户用它来降低其软件预算。这些工具提供了比其商业竞争对手更丰富的内容,最重要的是,它们是免费的。对于寻找充分支持的软件的客户来说,有 Enthought 及其 EPD 商用产品可供选择。它们为所有付费客户提供完整的客户支持和培训。