Python Cheat Sheet科学计算:NumPy与SciPy完全指南
【免费下载链接】pysheeet Python Cheat Sheet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet
你是否还在为Python科学计算中的数组操作、线性代数运算而烦恼?本文将系统介绍NumPy与SciPy两大科学计算库的核心功能,帮助你快速掌握数据处理、矩阵运算、统计分析等关键技能。读完本文,你将能够独立完成从数据加载到复杂科学计算的全流程任务。
NumPy基础:多维数组操作
NumPy(Numerical Python)是Python科学计算的基础库,提供了高效的多维数组对象和数学函数。其核心是ndarray(N维数组),支持矢量运算和广播机制,大幅提升计算效率。
数组创建与属性
NumPy提供多种创建数组的方法,常用的包括从列表转换、生成特定分布数组等。数组的核心属性包括维度(ndim)、形状(shape)、数据类型(dtype)和大小(size)。
import numpy as np
# 从列表创建数组
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape) # 输出 (2, 3),表示2行3列
print(a.ndim) # 输出 2,表示二维数组
print(a.dtype) # 输出 int64,元素数据类型
print(a.size) # 输出 6,元素总数
# 创建特殊数组
zeros = np.zeros((3, 4)) # 3行4列全0数组
ones = np.ones((2, 3), dtype=np.int16) # 2行3列全1数组,指定int16类型
arange = np.arange(10, 30, 5) # 从10开始,步长5,到30结束:[10 15 20 25]
linspace = np.linspace(0, 2*np.pi, 100) # 0到2π间均匀生成100个数
数组索引与切片
NumPy数组支持多种索引方式,包括整数索引、切片、布尔索引和花式索引,满足不同场景下的数据访问需求。
# 二维数组索引与切片
a = np.arange(12).reshape(3, 4) # 创建3行4列数组
print(a[1, 2]) # 输出 6,访问第2行第3列元素(0基索引)
print(a[:, 1]) # 输出 [1 5 9],获取第2列所有元素
print(a[1:3, :]) # 输出 [[4 5 6 7] [8 9 10 11]],获取第2-3行所有列
# 布尔索引
mask = a > 5
print(a[mask]) # 输出 [6 7 8 9 10 11],获取所有大于5的元素
# 花式索引
indices = [0, 2]
print(a[indices, :]) # 输出 [[0 1 2 3] [8 9 10 11]],获取第1和第3行
数组运算与广播
NumPy支持元素级运算、矩阵运算和广播机制,无需循环即可实现高效计算。
a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6], [7, 8]])
# 元素级运算
print(a + b) # 加法:[[ 6 8] [10 12]]
print(a * b) # 乘法:[[ 5 12] [21 32]]
print(a ** 2) # 平方:[[ 1 4] [ 9 16]]
# 矩阵运算
print(a @ b) # 矩阵乘法:[[19 22] [43 50]]
print(a.dot(b)) # 同上
print(np.matmul(a, b)) # 同上
# 广播机制:不同形状数组的运算
c = np.array([10, 20])
print(a + c) # 广播加法:[[11 22] [13 24]]
SciPy进阶:科学计算工具集
SciPy基于NumPy构建,提供了更丰富的科学计算功能,涵盖线性代数、优化、信号处理、统计分析等多个领域,是科研和工程计算的得力工具。
线性代数模块(scipy.linalg)
SciPy的线性代数模块提供了矩阵分解、求逆、特征值计算等高级功能,比NumPy的对应模块更全面。
from scipy import linalg
# 矩阵求逆
a = np.array([[1, 2], [3, 4]])
inv_a = linalg.inv(a)
print(inv_a) # 输出 [[-2. 1. ] [ 1.5 -0.5]]
# 特征值与特征向量
eigenvalues, eigenvectors = linalg.eig(a)
print(eigenvalues) # 特征值:[-0.37228132 5.37228132]
print(eigenvectors) # 特征向量矩阵
# 奇异值分解(SVD)
u, s, vh = linalg.svd(a)
print(u) # 左奇异向量
print(s) # 奇异值
print(vh) # 右奇异向量
统计分析模块(scipy.stats)
scipy.stats提供了丰富的概率分布、统计检验和描述性统计功能,适用于数据分析和建模。
from scipy import stats
# 正态分布
norm = stats.norm(loc=0, scale=1) # 均值为0,标准差为1的正态分布
print(norm.pdf(0)) # 输出 0.3989422804014327,概率密度函数在0处的值
print(norm.cdf(1)) # 输出 0.8413447460685429,累积分布函数在1处的值
print(norm.rvs(size=5)) # 生成5个随机样本:[-0.123 1.456 -0.789 0.345 2.101](示例)
# 描述性统计
data = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
print(stats.describe(data)) # 输出数据的基本统计信息:均值、标准差、最小值、最大值等
print(stats.pearsonr(data, data*2+1)) # 输出相关系数和p值:(1.0, 0.0)
实际应用:数据处理与可视化
结合NumPy、SciPy和Matplotlib,可完成从数据加载、处理到可视化的全流程分析。以下是一个简单的示例,展示如何使用这些库进行数据拟合和绘图。
import numpy as np
from scipy import optimize
import matplotlib.pyplot as plt
# 生成带噪声的数据
x = np.linspace(0, 10, 100)
y_true = 2 * x + 1
noise = np.random.normal(0, 1, 100)
y = y_true + noise
# 线性拟合
def linear_func(x, a, b):
return a * x + b
params, params_covariance = optimize.curve_fit(linear_func, x, y)
a, b = params
print(f"拟合参数:a={a:.2f}, b={b:.2f}") # 输出接近2和1的结果
# 绘图
plt.figure(figsize=(10, 6))
plt.scatter(x, y, label='带噪声数据', alpha=0.6)
plt.plot(x, y_true, 'r-', label='真实曲线')
plt.plot(x, linear_func(x, a, b), 'g--', label=f'拟合曲线: y={a:.2f}x+{b:.2f}')
plt.xlabel('x')
plt.ylabel('y')
plt.legend()
plt.title('线性回归拟合示例')
plt.grid(True)
plt.show()
总结与扩展
本文介绍了NumPy的多维数组操作和SciPy的核心功能,涵盖了科学计算的基础知识。实际应用中,还可结合Pandas进行数据处理、Scikit-learn进行机器学习建模,构建更复杂的数据分析 pipeline。建议进一步学习官方文档以深入掌握高级特性:
- NumPy官方文档:NumPy Documentation
- SciPy官方文档:SciPy Documentation
通过不断实践,你将能熟练运用这些工具解决实际的科学计算问题,提升数据处理和分析效率。
【免费下载链接】pysheeet Python Cheat Sheet 项目地址: https://gitcode.com/gh_mirrors/py/pysheeet
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



