scipy-best-practices
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseSciPy Best Practices
SciPy 最佳实践
Expert guidelines for SciPy development, focusing on scientific computing, optimization, signal processing, and statistical analysis.
针对SciPy开发的专家指南,聚焦于科学计算、优化、信号处理与统计分析。
Code Style and Structure
代码风格与结构
- Write concise, technical Python code with accurate SciPy examples
- Prioritize numerical accuracy and computational efficiency
- Use functional programming patterns for mathematical operations
- Prefer vectorized operations over explicit loops
- Use descriptive variable names reflecting scientific context
- Follow PEP 8 style guidelines
- 编写简洁、专业的Python代码,并附带准确的SciPy示例
- 优先考虑数值准确性与计算效率
- 对数学运算使用函数式编程模式
- 优先使用向量化运算而非显式循环
- 使用反映科学场景的描述性变量名
- 遵循PEP 8风格指南
scipy.optimize - Optimization
scipy.optimize - 优化
- Use for general-purpose optimization
scipy.optimize.minimize() - Choose appropriate method based on problem characteristics:
- for smooth, unconstrained problems
'BFGS' - for bounded problems
'L-BFGS-B' - for constrained optimization
'SLSQP' - for non-differentiable functions
'Nelder-Mead'
- Provide gradients when available for faster convergence
- Use for nonlinear least squares fitting
scipy.optimize.curve_fit() - Use for finding roots of equations
scipy.optimize.root()
- 使用进行通用优化
scipy.optimize.minimize() - 根据问题特性选择合适的方法:
- 用于平滑、无约束问题
'BFGS' - 用于有界问题
'L-BFGS-B' - 用于约束优化
'SLSQP' - 用于不可微函数
'Nelder-Mead'
- 若有梯度信息则提供,以加快收敛速度
- 使用进行非线性最小二乘拟合
scipy.optimize.curve_fit() - 使用求解方程的根
scipy.optimize.root()
scipy.linalg - Linear Algebra
scipy.linalg - 线性代数
- Prefer over
scipy.linalgfor additional functionalitynumpy.linalg - Use instead of computing matrix inverse
scipy.linalg.solve() - Leverage specialized solvers for structured matrices (banded, triangular)
- Use and
scipy.linalg.lu_factor()for multiple right-hand sideslu_solve() - Use sparse matrix solvers from for large sparse systems
scipy.sparse.linalg
- 优先使用而非
scipy.linalg,以获得更多功能numpy.linalg - 使用而非计算矩阵逆
scipy.linalg.solve() - 针对结构化矩阵(带状、三角矩阵)使用专用求解器
- 使用和
scipy.linalg.lu_factor()处理多右侧项问题lu_solve() - 针对大型稀疏系统,使用中的稀疏矩阵求解器
scipy.sparse.linalg
scipy.stats - Statistics
scipy.stats - 统计
- Use distribution objects for probability calculations
- Leverage for summary statistics
scipy.stats.describe() - Use hypothesis testing functions: ,
ttest_ind(),chi2_contingency()mannwhitneyu() - Generate random samples with method on distributions
.rvs() - Use for parameter estimation from data
.fit()
- 使用分布对象进行概率计算
- 利用生成汇总统计信息
scipy.stats.describe() - 使用假设检验函数:、
ttest_ind()、chi2_contingency()mannwhitneyu() - 调用分布对象的方法生成随机样本
.rvs() - 使用从数据中估计参数
.fit()
scipy.interpolate - Interpolation
scipy.interpolate - 插值
- Use for 1D interpolation
scipy.interpolate.interp1d() - Use for scattered data interpolation
scipy.interpolate.griddata() - Choose appropriate interpolation method: 'linear', 'cubic', 'nearest'
- Use spline functions for smooth interpolation: ,
UnivariateSplineBSpline - Consider for regular grid data
RegularGridInterpolator
- 使用进行一维插值
scipy.interpolate.interp1d() - 使用进行散点数据插值
scipy.interpolate.griddata() - 选择合适的插值方法:'linear'、'cubic'、'nearest'
- 使用样条函数实现平滑插值:、
UnivariateSplineBSpline - 针对规则网格数据,考虑使用
RegularGridInterpolator
scipy.integrate - Integration
scipy.integrate - 积分
- Use for single integrals
scipy.integrate.quad() - Use ,
scipy.integrate.dblquad()for multiple integralstplquad() - Use for ordinary differential equations
scipy.integrate.solve_ivp() - Choose appropriate ODE method: 'RK45', 'BDF', 'LSODA'
- Provide Jacobian for stiff systems to improve performance
- 使用进行单积分
scipy.integrate.quad() - 使用、
scipy.integrate.dblquad()进行多重积分tplquad() - 使用求解常微分方程
scipy.integrate.solve_ivp() - 选择合适的ODE方法:'RK45'、'BDF'、'LSODA'
- 针对刚性系统提供雅可比矩阵以提升性能
scipy.signal - Signal Processing
scipy.signal - 信号处理
- Use ,
scipy.signal.butter(),cheby1()for filter designellip() - Apply filters with for zero-phase filtering
scipy.signal.filtfilt() - Use for power spectral density estimation
scipy.signal.welch() - Use for peak detection
scipy.signal.find_peaks() - Leverage and
scipy.signal.convolve()for convolutioncorrelate()
- 使用、
scipy.signal.butter()、cheby1()进行滤波器设计ellip() - 使用应用滤波器以实现零相位滤波
scipy.signal.filtfilt() - 使用估计功率谱密度
scipy.signal.welch() - 使用进行峰值检测
scipy.signal.find_peaks() - 利用和
scipy.signal.convolve()进行卷积运算correlate()
scipy.sparse - Sparse Matrices
scipy.sparse - 稀疏矩阵
- Use appropriate sparse format for your use case:
- for efficient row slicing and matrix-vector products
csr_matrix - for efficient column slicing
csc_matrix - for constructing sparse matrices
coo_matrix - for incremental construction
lil_matrix
- Convert to optimal format before operations
- Use solvers for sparse linear systems
scipy.sparse.linalg
- 根据使用场景选择合适的稀疏格式:
- 用于高效行切片和矩阵-向量乘积
csr_matrix - 用于高效列切片
csc_matrix - 用于构建稀疏矩阵
coo_matrix - 用于增量构建矩阵
lil_matrix
- 在执行运算前转换为最优格式
- 使用求解器处理稀疏线性系统
scipy.sparse.linalg
Performance Optimization
性能优化
- Use appropriate data types (for precision,
float64for memory)float32 - Leverage BLAS/LAPACK through SciPy for optimized linear algebra
- Pre-allocate arrays when possible
- Use in-place operations when available
- 使用合适的数据类型(保证精度,
float64节省内存)float32 - 通过SciPy利用BLAS/LAPACK实现优化的线性代数运算
- 尽可能预先分配数组
- 尽可能使用原地操作
Error Handling and Validation
错误处理与验证
- Check convergence status of optimization routines
- Validate numerical results for reasonableness
- Handle ill-conditioned problems gracefully
- Use appropriate tolerances for convergence criteria
- 检查优化例程的收敛状态
- 验证数值结果的合理性
- 优雅处理病态问题
- 为收敛准则设置合适的容差
Testing Scientific Code
科学代码测试
- Test against known analytical solutions
- Use for numerical comparisons
np.testing.assert_allclose() - Test edge cases and boundary conditions
- Verify conservation laws and invariants
- 对照已知的解析解进行测试
- 使用进行数值比较
np.testing.assert_allclose() - 测试边缘情况与边界条件
- 验证守恒律与不变量
Key Conventions
关键约定
- Import specific submodules:
from scipy import optimize, stats, linalg - Use for variables and functions
snake_case - Document algorithm choices and parameters
- Include convergence diagnostics in output
- 导入特定子模块:
from scipy import optimize, stats, linalg - 变量和函数使用命名法
snake_case - 记录算法选择与参数
- 在输出中包含收敛诊断信息