正文内容
本文档是 Konrad Hinsen 于 1997 年撰写的 Scientific Computing in Python 教程,是 Python 科学计算领域最早的系统性教材之一。作者当时在法国格勒诺布尔 IBS 研究所工作。
文档结构(共 14 章节)
1. 交互式 Python:终极桌面计算器
强调交互开发的重要性,推荐准备一个 interactive.py 自动导入常用模块。
2. 科学数据类型与函数
- Numbers:int、long、float(IEEE 754 双精度)、complex;
real模块支持任意精度实数 - Geometry:
Vector(三维向量,不可变)、Tensor(二阶张量,支持对称/反对称分解、特征值)、Transformation(平移+旋转组合) - Arrays:多维同类型数组,替代嵌套列表的核心数据类型(详细用法见独立教程)
- Linear Algebra:基于 LAPACK,解线性方程组、矩阵求逆、SVD
- Fourier Transforms:基于 FFTPACK,1D/2D FFT
- Statistics:平均值、方差、标准差、直方图
- Parameter Fitting:
LeastSquares模块实现 Levenberg-Marquardt 算法,支持自动求导 - Interpolation:
InterpolatingFunction支持多变量网格数据的连续插值,附带微分/积分操作 - Polynomial Fits:最小二乘多项式拟合
- 自定义数据类型:用 Python class 轻松定义领域特定类型(示例:Vector 类)
3. 文件 I/O
- 文本文件:
open()、readline()、TextFile类(透明支持.gz压缩) - 输出格式化:
%格式化运算符,与 C printf 类似 - 输入解析:
string.split()分割、string.atof()/atoi()转换 - Fortran 固定格式:
FortranFormat模块 - 二进制文件:
struct.pack()/unpack()处理机器相关格式 - 标准格式:PDB(蛋白质数据银行)、VRML(3D 场景)、netCDF(科学数据)
4. 绘图与可视化
- Gnuplot 接口:
Gnuplot模块,支持 2D 线图,可输出 PostScript - VRML 3D:
VRML模块,支持 Sphere、Cube、Cylinder、Cone、Line、Arrow,支持材质/颜色/透明度
5. 与外部程序和库的接口
- 运行外部程序:
os.system()(阻塞)、os.popen()(管道)、os.fork()(后台进程) - SWIG 包装:用
.i接口文件自动生成 C 扩展模块,支持 C 和 C++ 库 - Fortran 库包装:需手动写 C 包装层,注意编译器兼容性
- C 扩展模块优化:时间关键代码用 C 重写,利用动态库实现运行时代码生成
6. 科学库与应用
- GIST、DISLIN、PIL、OpenGL 等图形库
- MMTK(分子建模工具包)、Khoros、Yorick 等科学应用
- 数学/科学代码集合(Python FTP 站点)
核心价值
- 系统性:从数据类型到文件 I/O 到外部接口,构建了完整的科学计算 Python 工作流框架
- 历史参考价值:记录了 Python 科学计算生态在 NumPy/SciPy 普及前的真实面貌,
Scientific Python项目是后来 NumPy 的重要前驱 - 方法论:文件 I/O 策略(文本→二进制→标准格式)、SWIG 包装模式、C 扩展优化思路至今仍然适用
与现代表达对照
| 1997 年做法 | 现代替代 |
|---|---|
from Numeric import * | import numpy as np |
from LinearAlgebra import * | np.linalg.* |
from FFT import * | np.fft.* |
from Statistics import * | np.mean/std/var |
from LeastSquares import leastSquaresFit | scipy.optimize.least_squares |
from Interpolation import InterpolatingFunction | scipy.interpolate |
from Gnuplot import plot | matplotlib.pyplot |
| SWIG 手动配置 | pybind11 / ctypes / Cython |