关于 scipy-best-practices
面向 SciPy 科学计算开发的 Python 实践指南,涵盖优化、数值方法、统计、插值、信号处理、稀疏矩阵与测试。
主要功能
- 01优化方法选择建议
- 02线性代数与稀疏求解器
- 03统计与插值指南
- 04积分和信号处理方法
- 05数值验证与测试
适用场景
- 01为数值问题选择优化器
- 02求解大型稀疏线性系统
- 03分析信号或统计数据
- 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