性能优化
在 Python 中用 SciPy 做科学计算、优化…
适用于需要数值优化、线性代数、统计检验、插值、积分、信号处理、稀疏矩阵和科学代码验证的 SciPy 开发场景。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
在 Python 中用 SciPy 做科通用
解决思路
- 编写简洁、技术性强的 Python 代码,并提供准确的 SciPy 示例
- 优先保证数值准确性和计算效率
- 对数学运算使用函数式编程模式
- 优先使用向量化操作而不是显式循环
- 使用能反映科学上下文的描述性变量名
- 遵循 PEP 8 风格指南
- 使用 `scipy.optimize.minimize()` 进行通用优化
- 根据问题特征选择合适的 method
- `'BFGS'` 用于光滑、无约束问题
- `'L-BFGS-B'` 用于有界问题
- `'SLSQP'` 用于约束优化
- `'Nelder-Mead'` 用于不可微函数
- 在可用时提供梯度以加快收敛
- 使用 `scipy.optimize.curve_fit()` 进行非线性最小二乘拟合
- 使用 `scipy.optimize.root()` 求方程的根
- 优先使用 `scipy.linalg` 而不是 `numpy.linalg`,以获得更多功能
- 使用 `scipy.linalg.solve()`,而不是计算矩阵逆
- 对结构化矩阵(banded、triangular)利用专用求解器
- 对多个右端项使用 `scipy.linalg.lu_factor()` 和 `lu_solve()`
- 对大型稀疏系统使用 `scipy.sparse.linalg` 中的稀疏矩阵求解器
- 使用分布对象进行概率计算
- 利用 `scipy.stats.describe()` 获取汇总统计
- 使用假设检验函数:`ttest_ind()`、`chi2_contingency()`、`mannwhitneyu()`
- 使用分布对象上的 `.rvs()` 方法生成随机样本
- 使用 `.fit()` 从数据估计参数
- 使用 `scipy.interpolate.interp1d()` 进行一维插值
- 使用 `scipy.interpolate.griddata()` 进行散乱数据插值
- 选择合适的插值方法:`'linear'`、`'cubic'`、`'nearest'`
- 使用样条函数进行平滑插值:`UnivariateSpline`、`BSpline`
- 对规则网格数据考虑 `RegularGridInterpolator`
- 使用 `scipy.integrate.quad()` 求单重积分
- 使用 `scipy.integrate.dblquad()`、`tplquad()` 求多重积分
- 使用 `scipy.integrate.solve_ivp()` 求解常微分方程
- 选择合适的 ODE method:`'RK45'`、`'BDF'`、`'LSODA'`
- 为刚性系统提供 Jacobian 以提升性能
- 使用 `scipy.signal.butter()`、`cheby1()`、`ellip()` 设计滤波器
- 使用 `scipy.signal.filtfilt()` 应用零相位滤波
- 使用 `scipy.signal.welch()` 估计功率谱密度
- 使用 `scipy.signal.find_peaks()` 进行峰值检测
- 利用 `scipy.signal.convolve()` 和 `correlate()` 进行卷积
- 根据用例使用合适的稀疏格式
- `csr_matrix` 用于高效行切片和矩阵-向量乘积
- `csc_matrix` 用于高效列切片
- `coo_matrix` 用于构造稀疏矩阵
- `lil_matrix` 用于增量构造
- 在执行操作前转换为最优格式
- 使用 `scipy.sparse.linalg` 求解器求解稀疏线性系统
- 使用合适的数据类型(`float64` 保证精度,`float32` 节省内存)
- 通过 SciPy 利用 BLAS/LAPACK 进行优化线性代数
- 尽可能预分配数组
- 在可用时使用原地操作
- 检查优化例程的收敛状态
- 验证数值结果是否合理
- 优雅地处理病态问题
- 为收敛准则使用合适的容差
- 针对已知解析解进行测试
- 使用 `np.testing.assert_allclose()` 进行数值比较
- 测试边缘情况和边界条件
- 验证守恒定律和不变量
- 导入具体子模块:`from scipy import optimize, stats, linalg`
- 对变量和函数使用 `snake_case`
- 记录算法选择和参数
- 在输出中包含收敛诊断
适用边界 · 注意事项
- 当任务主要是深度学习、GPU 加速或自动微分时,应优先考虑 PyTorch/JAX/TensorFlow 等框架。
- 当只需要基础数组操作且 NumPy 已足够时,不必引入 SciPy 的额外功能。
- 当需要分布式计算或超大规模并行时,仅靠 SciPy 可能不够,应评估 Dask、MPI 或专用求解器。