mcpField
S
scipy-best-practices

scipy-best-practices

github.com/mindrally数据与数据库2871.0k 次安装3 周前更新
代码仓库

关于 scipy-best-practices

面向 SciPy 科学计算开发的 Python 实践指南,涵盖优化、数值方法、统计、插值、信号处理、稀疏矩阵与测试。

主要功能

  1. 01优化方法选择建议
  2. 02线性代数与稀疏求解器
  3. 03统计与插值指南
  4. 04积分和信号处理方法
  5. 05数值验证与测试

适用场景

  1. 01为数值问题选择优化器
  2. 02求解大型稀疏线性系统
  3. 03分析信号或统计数据
  4. 04对照已知结果测试科学计算

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/mindrally/skills --skill scipy-best-practices

安装后在 Claude Code 中输入/scipy-best-practices确认已加载。

详细介绍

SciPy 最佳实践

为 SciPy 开发提供的专家指南,重点关注科学计算、优化、信号处理和统计分析。

代码风格与结构

  • 编写简洁、专业的 Python 代码,并提供准确的 SciPy 示例
  • 优先考虑数值精度和计算效率
  • 对数学运算使用函数式编程模式
  • 优先使用向量化运算,而不是显式循环
  • 使用能够体现科学语境的描述性变量名
  • 遵循 PEP 8 风格指南

scipy.optimize - 优化

  • 使用 scipy.optimize.minimize() 进行通用优化
  • 根据问题特征选择合适的方法:
    • 'BFGS' 适用于平滑、无约束问题
    • 'L-BFGS-B' 适用于有边界约束的问题
    • 'SLSQP' 适用于有约束优化
    • 'Nelder-Mead' 适用于不可微函数
  • 在可用时提供梯度,以加快收敛
  • 使用 scipy.optimize.curve_fit() 进行非线性最小二乘拟合
  • 使用 scipy.optimize.root() 求解方程的根

scipy.linalg - 线性代数

  • 相较于 numpy.linalg,优先使用功能更丰富的 scipy.linalg
  • 使用 scipy.linalg.solve(),而不是计算矩阵逆
  • 对结构化矩阵(带状矩阵、三角矩阵)使用专用求解器
  • 对多个右端项使用 scipy.linalg.lu_factor() 和 lu_solve()
  • 对大型稀疏系统使用 scipy.sparse.linalg 中的稀疏矩阵求解器

scipy.stats - 统计

  • 使用分布对象进行概率计算
  • 使用 scipy.stats.describe() 获取汇总统计量
  • 使用假设检验函数:ttest_ind()、chi2_contingency()、mannwhitneyu()
  • 使用分布对象的 .rvs() 方法生成随机样本
  • 使用 .fit() 根据数据估计参数

scipy.interpolate - 插值

  • 使用 scipy.interpolate.interp1d() 进行一维插值
  • 使用 scipy.interpolate.griddata() 对离散数据进行插值
  • 选择合适的插值方法:'linear'、'cubic'、'nearest'
  • 使用样条函数进行平滑插值:UnivariateSpline、BSpline
  • 对规则网格数据,可考虑使用 RegularGridInterpolator

scipy.integrate - 积分

  • 使用 scipy.integrate.quad() 计算单重积分
  • 使用 scipy.integrate.dblquad()、tplquad() 计算多重积分
  • 使用 scipy.integrate.solve_ivp() 求解常微分方程
  • 选择合适的 ODE 方法:'RK45'、'BDF'、'LSODA'
  • 对刚性系统提供雅可比矩阵,以提升性能

scipy.signal - 信号处理

  • 使用 scipy.signal.butter()、cheby1()、ellip() 设计滤波器
  • 使用 scipy.signal.filtfilt() 应用滤波器,实现零相位滤波
  • 使用 scipy.signal.welch() 估计功率谱密度
  • 使用 scipy.signal.find_peaks() 检测峰值
  • 使用 scipy.signal.convolve() 和 correlate() 进行卷积

scipy.sparse - 稀疏矩阵

  • 根据使用场景选择合适的稀疏格式:
    • 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
  • 记录算法选择和参数
  • 在输出中包含收敛诊断信息

评论

支持 Markdown