核心基础库
NumPy
科学计算的基础库 提供多维数组对象和各种派生对象 具有高效的数组运算能力 提供大量的数学函数库 是其他科学计算库的基础依赖
示例代码:
import numpy as np
# 创建数组
arr = np.array([1, 2, 3, 4, 5])
matrix = np.array([[1, 2, 3], [4, 5, 6]])
# 基本运算
print(arr * 2) # [2 4 6 8 10]
print(matrix.shape) # (2, 3)
# 数学运算
print(np.mean(arr)) # 3.0
print(np.sum(matrix)) # 21
Pandas
强大的数据分析和处理工具 提供 DataFrame 和 Series 等数据结构 擅长处理表格和时间序列数据 具有强大的数据清洗、转换和分析功能 支持多种文件格式的读写 (CSV、Excel 等)
示例代码:
import pandas as pd
# 创建 DataFrame
df = pd.DataFrame({
'姓名': ['张三', '李四', '王五'],
'年龄': [25, 30, 35],
'城市': ['北京', '上海', '广州']
})
# 基本操作
print(df.head())
print(df['年龄'].mean()) # 30.0
# 数据筛选
print(df[df['年龄'] > 30])
Matplotlib
Python 最著名的绘图库 提供类似 MATLAB 的绘图 API 支持各种 2D 和基础 3D 图表 可以生成出版质量的图表 高度可定制化
示例代码:
import matplotlib.pyplot as plt
import numpy as np
# 创建简单折线图
x = np.linspace(0, 10, 100)
y = np.sin(x)
plt.plot(x, y)
plt.title('正弦波')
plt.xlabel('x')
plt.ylabel('sin(x)')
plt.grid(True)
plt.show()
科学计算扩展库
SciPy
建立在 NumPy 基础上的科学计算工具集 提供优化、线性代数、积分、插值等功能 包含大量科学工程计算相关的子模块 适用于科研和工程领域
示例代码:
from scipy import optimize
import numpy as np
# 定义要优化的函数
def f(x):
return (x[0] - 1)**2 + (x[1] - 2)**2
# 最小化函数
result = optimize.minimize(f, [0, 0])
print(result.x) # [1. 2.]
SymPy
符号计算库 支持代数运算、微积分、方程求解 可以进行数学表达式的符号推导 适合数学教育和理论研究
示例代码:
from sympy import symbols, solve, diff
# 定义符号变量
x, y = symbols('x y')
# 解方程
expr = x**2 - 4
solution = solve(expr, x)
print(solution) # [-2, 2]
# 求导
derivative = diff(x**3 + x**2, x)
print(derivative) # 3*x**2 + 2*x
统计和机器学习
PyMC
概率编程库 专注于贝叶斯统计建模 支持 MCMC 等采样方法 适合统计推断和不确定性建模
示例代码:
import pymc as pm
import numpy as np
# 简单的贝叶斯模型
with pm.Model() as model:
# 先验分布
mu = pm.Normal('mu', mu=0, sigma=1)
# 似然函数
obs = pm.Normal('obs', mu=mu, sigma=1, observed=np.random.randn(100))
# 进行推断
trace = pm.sample(1000)
Stan
统计建模和高性能统计计算平台 支持贝叶斯推断 具有自己的概率编程语言 广泛应用于统计研究和数据科学
示例代码:
import cmdstanpy
# Stan 模型代码
stan_code = """
data {
int<lower=0> N;
vector[N] y;
}
parameters {
real mu;
real<lower=0> sigma;
}
model {
y ~ normal(mu, sigma);
}
"""
# 编译和运行模型
model = cmdstanpy.CmdStanModel(model_code=stan_code)
特定领域工具
Astropy
天文学专用工具库 提供天文数据处理和分析功能 包含天文坐标系统、时间处理等专业功能
示例代码:
from astropy.coordinates import SkyCoord
import astropy.units as u
# 创建天体坐标
coord = SkyCoord(ra=10.68458*u.degree, dec=41.26917*u.degree, frame='icrs')
print(coord.to_string('hmsdms'))
# 坐标转换
galactic = coord.galactic
print(f"银道坐标: {galactic.l.deg:.2f}°, {galactic.b.deg:.2f}°")
Econ-ARK
经济学建模工具集 专注于异质主体建模 适用于经济学研究和政策分析
示例代码:
from HARK.ConsumptionSaving.ConsIndShockModel import IndShockConsumerType
# 创建消费者模型
consumer = IndShockConsumerType()
# 解决消费者问题
consumer.solve()
# 模拟消费者行为
consumer.simulate()
交互式计算环境
IPython/Jupyter
交互式 Python 计算环境 支持代码、文档和可视化的混合展示 广泛用于数据分析和教学
示例代码:
# 在 Jupyter Notebook 中运行
from IPython.display import display, Math, Latex
# 显示数学公式
display(Math(r'F(k) = \int_{-\infty}^{\infty} f(x) e^{2\pi i k x} dx'))
# 魔法命令
%time range(1000000) # 测量代码执行时间
nteract
现代化的交互式计算环境 提供桌面应用程序界面 支持实时代码执行和数据可视化
示例代码:
# nteract 中的数据可视化
import altair as alt
import pandas as pd
data = pd.DataFrame({
'x': range(10),
'y': [i**2 for i in range(10)]
})
chart = alt.Chart(data).mark_line().encode(
x='x',
y='y'
)
chart
其他专业工具
Julia
虽然不是 Python 库,但是一个重要的科学计算编程语言 具有接近 C 的性能 特别适合数值计算和科学计算
示例代码:
# Julia 代码示例
function mandelbrot(h, w)
return [escape_time(complex(2*x/w-1.5, 2*y/h-1)) for y in 1:h, x in 1:w]
end
function escape_time(c, maxiter=100)
z = 0
for n = 1:maxiter
if abs(z) > 2
return n
end
z = z^2 + c
end
return maxiter
end
PyTables
用于管理大型数据集 基于 HDF5 文件格式 高效处理大规模科学数据
示例代码:
import tables as tb
import numpy as np
# 创建 HDF5 文件
class Particle(tb.IsDescription):
name = tb.StringCol(16)
position = tb.Float64Col(shape=(3,))
velocity = tb.Float64Col(shape=(3,))
with tb.open_file('particles.h5', 'w') as h5file:
table = h5file.create_table('/', 'particles', Particle)
particle = table.row
# 写入数据
for i in range(10):
particle['name'] = f'particle_{i}'
particle['position'] = np.random.random(3)
particle['velocity'] = np.random.random(3)
particle.append()
yt
科学数据分析和可视化工具 特别适合物理模拟数据 支持多维数据分析
示例代码:
import yt
import numpy as np
# 创建示例数据
data = dict(density = (np.random.random((128, 128, 128)), "g/cm**3"),
temperature = (np.random.random((128, 128, 128)), "K"))
# 创建数据集
ds = yt.load_uniform_grid(data, data["density"][0].shape)
# 创建切片图
slc = yt.SlicePlot(ds, "z", ["density", "temperature"])
slc.save()