正文内容

本文档是 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 站点)

核心价值

  1. 系统性:从数据类型到文件 I/O 到外部接口,构建了完整的科学计算 Python 工作流框架
  2. 历史参考价值:记录了 Python 科学计算生态在 NumPy/SciPy 普及前的真实面貌,Scientific Python 项目是后来 NumPy 的重要前驱
  3. 方法论:文件 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 leastSquaresFitscipy.optimize.least_squares
from Interpolation import InterpolatingFunctionscipy.interpolate
from Gnuplot import plotmatplotlib.pyplot
SWIG 手动配置pybind11 / ctypes / Cython