ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

SciPy 模块列表:核心子模块与实战代码示例

SciPy 模块列表:核心子模块与实战代码示例 1. 引言SciPy 是 Python 科学计算生态中的核心库构建在 NumPy 之上为数值积分、优化、线性代数、信号处理、统计等提供了高效且易用的接口。本文按模块分类梳理 SciPy 的常用子模块并给出可直接运行的代码示例帮助读者快速上手。2. 模块总览SciPy 由多个功能独立的子模块组成每个子模块通过scipy.xxx的方式导入。下表列出了最常用的模块及其用途模块导入方式主要功能常量scipy.constants物理常数与单位换算线性代数scipy.linalg矩阵分解、求解线性方程组插值scipy.interpolate一维/多维插值优化scipy.optimize函数最小化、求根、拟合信号处理scipy.signal滤波、卷积、频谱分析统计scipy.stats概率分布、假设检验积分scipy.integrate数值积分、常微分方程求解稀疏矩阵scipy.sparse稀疏矩阵存储与运算图像处理scipy.ndimage多维图像滤波、形态学操作空间算法scipy.spatialKDTree、凸包、距离计算3. scipy.constants物理常量与单位在科学计算中经常需要用到物理常数scipy.constants提供了高精度的内置常量并支持常用单位换算。from scipy import constants 常用物理常量 print(光速 c , constants.c) print(普朗克常数 h , constants.h) print(引力常数 G , constants.G) print(阿伏伽德罗常数 N_A , constants.N_A) 单位换算1 英寸等于多少米 print(1 inch , constants.inch, 米) print(1 电子伏特 , constants.eV, 焦耳)4. scipy.linalg线性代数运算scipy.linalg在 NumPy 的基础上提供了更丰富的矩阵分解算法例如 LU、QR、SVD 分解以及求解线性方程组。import numpy as np from scipy import linalg 构造系数矩阵和常数向量 A np.array([[3, 2, 0], [1, -1, 0], [0, 5, 1]], dtypefloat) b np.array([2, 4, -1], dtypefloat) 求解线性方程组 Ax b x linalg.solve(A, b) print(解 x , x) 矩阵的 LU 分解 P, L, U linalg.lu(A) print(L 矩阵\n, L) print(U 矩阵\n, U) 奇异值分解 U_svd, s, Vt linalg.svd(A) print(奇异值 , s)5. scipy.interpolate数据插值插值用于根据已知离散点估计未知位置的值。scipy.interpolate支持线性插值、三次样条插值等多种方法。import numpy as np import matplotlib.pyplot as plt from scipy import interpolate 已知数据点 x np.array([0, 1, 2, 3, 4, 5]) y np.array([0, 0.8, 0.9, 0.1, -0.8, -1.0]) 创建三次样条插值函数 f_linear interpolate.interp1d(x, y, kindlinear) f_cubic interpolate.interp1d(x, y, kindcubic) 在更细的网格上求值 x_new np.linspace(0, 5, 100) y_linear f_linear(x_new) y_cubic f_cubic(x_new) 可视化对比 plt.plot(x, y, o, label原始数据) plt.plot(x_new, y_linear, --, label线性插值) plt.plot(x_new, y_cubic, -, label三次样条插值) plt.legend() plt.show()6. scipy.optimize优化与求根scipy.optimize是使用频率最高的模块之一可用于函数最小值求解、方程求根以及曲线拟合。import numpy as np from scipy import optimize 6.1 标量函数最小化 def f(x): return x**2 5 * np.sin(x) result optimize.minimize_scalar(f, bounds(-5, 5), methodbounded) print(最小值点 x , result.x, 最小值 f(x) , result.fun) 6.2 方程求根 root optimize.root_scalar(f, bracket[-5, 5]) print(方程的根 x , root.root) 6.3 曲线拟合 x_data np.linspace(0, 4, 50) y_data 2.5 * np.exp(-1.3 * x_data) 0.5 * np.random.normal(size50) def model(x, a, b, c): return a * np.exp(-b * x) c params, _ optimize.curve_fit(model, x_data, y_data) print(拟合参数 a, b, c , params)7. scipy.signal信号处理scipy.signal提供了滤波器设计、卷积、频谱分析等信号处理工具。import numpy as np from scipy import signal 生成采样信号50Hz 正弦波 噪声 fs 1000 # 采样率 1000Hz t np.linspace(0, 1, fs, endpointFalse) clean np.sin(2 * np.pi * 50 * t) noisy clean 0.5 * np.random.normal(sizet.shape) 设计 4 阶巴特沃斯低通滤波器截止频率 100Hz b, a signal.butter(4, 100, fsfs, btypelow) filtered signal.lfilter(b, a, noisy) 计算功率谱密度 freqs, psd signal.periodogram(noisy, fsfs) print(频谱峰值频率 , freqs[np.argmax(psd)], Hz) 卷积操作 kernel np.ones(5) / 5 convolved signal.convolve(noisy, kernel, modesame)8. scipy.stats统计分析scipy.stats包含大量概率分布、统计函数和假设检验工具是数据分析的常用模块。import numpy as np from scipy import stats 8.1 生成正态分布随机数 data stats.norm.rvs(loc0, scale1, size1000, random_state42) 8.2 计算描述性统计量 print(均值 , np.mean(data)) print(标准差 , np.std(data)) print(偏度 , stats.skew(data)) print(峰度 , stats.kurtosis(data)) 8.3 t 检验检验均值是否等于 0 t_stat, p_value stats.ttest_1samp(data, 0) print(t 统计量 , t_stat, p 值 , p_value) 8.4 正态性检验 shapiro_stat, shapiro_p stats.shapiro(data) print(Shapiro-Wilk 检验 p 值 , shapiro_p) 8.5 概率密度函数 x np.linspace(-4, 4, 100) pdf stats.norm.pdf(x, loc0, scale1) cdf stats.norm.cdf(x, loc0, scale1)9. scipy.integrate数值积分与微分方程scipy.integrate支持定积分计算以及常微分方程ODE的数值求解。import numpy as np from scipy import integrate 9.1 定积分∫₀¹ x² dx result, error integrate.quad(lambda x: x**2, 0, 1) print(定积分结果 , result, 误差估计 , error) 9.2 二重积分 def integrand(y, x): return x * y result2, error2 integrate.dblquad(integrand, 0, 1, lambda x: 0, lambda x: 1) print(二重积分结果 , result2) 9.3 求解常微分方程 dy/dt -2y初值 y(0) 1 def ode_func(y, t): return -2 * y t_span np.linspace(0, 5, 100) y0 [1.0] solution integrate.odeint(ode_func, y0, t_span) print(t5 时 y , solution[-1][0])10. scipy.sparse稀疏矩阵当矩阵中绝大多数元素为零时使用稀疏矩阵可以大幅节省内存并提升运算速度。import numpy as np from scipy import sparse 构造一个 1000x1000 的稀疏矩阵仅少量非零元素 dense np.zeros((1000, 1000)) dense[0, 0] 1 dense[100, 200] 2 dense[999, 999] 3 转换为 CSR 格式稀疏矩阵 sparse_matrix sparse.csr_matrix(dense) print(稀疏矩阵存储的非零元素个数 , sparse_matrix.nnz) print(稀疏矩阵形状 , sparse_matrix.shape) 稀疏矩阵的算术运算 sparse_result sparse_matrix sparse_matrix.transpose() 稀疏矩阵与向量的乘法 vector np.ones(1000) result_vec sparse_matrix.dot(vector) print(稀疏矩阵乘向量结果的前 3 个元素 , result_vec[:3])11. scipy.ndimage多维图像处理scipy.ndimage提供多维数组的滤波、形态学操作和测量功能常用于图像处理。import numpy as np from scipy import ndimage 生成一个带噪声的二维图像 image np.zeros((100, 100)) image[30:70, 30:70] 1 noisy_image image 0.1 * np.random.normal(sizeimage.shape) 高斯滤波平滑图像 smoothed ndimage.gaussian_filter(noisy_image, sigma2) 中值滤波去除椒盐噪声 median_filtered ndimage.median_filter(noisy_image, size3) 图像膨胀与腐蚀 dilated ndimage.binary_dilation(image 0.5) eroded ndimage.binary_erosion(image 0.5) 连通域标记 labeled, num_features ndimage.label(image 0.5) print(检测到连通域数量 , num_features)12. scipy.spatial空间数据结构scipy.spatial提供 KDTree、凸包计算、距离矩阵等空间算法常用于最近邻搜索和几何计算。import numpy as np from scipy import spatial 生成随机点集 points np.random.rand(20, 2) 12.1 KDTree 最近邻搜索 tree spatial.KDTree(points) query_point np.array([0.5, 0.5]) distance, index tree.query(query_point) print(最近邻点索引 , index, 距离 , distance) 12.2 计算凸包 hull spatial.ConvexHull(points) print(凸包顶点数量 , len(hull.vertices)) 12.3 计算距离矩阵 distance_matrix spatial.distance_matrix(points, points) print(距离矩阵形状 , distance_matrix.shape) 12.4 计算两点之间的欧氏距离 dist spatial.distance.euclidean(points[0], points[1]) print(第 0 点和第 1 点的欧氏距离 , dist)13. 总结SciPy 的模块化设计让科学计算任务变得清晰而高效。实际项目中这些模块经常组合使用例如先用scipy.signal预处理信号再用scipy.stats做统计分析最后用scipy.optimize拟合模型参数。建议读者结合官方文档针对自己的业务场景选择合适的模块并动手实践。
返回列表