SciPy Best Practices
Expert guidelines for SciPy development, focusing on scientific computing, optimization, signal processing, and statistical analysis.
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
scipy.optimize - Optimization
- •Use
scipy.optimize.minimize()for general-purpose optimization - •Choose appropriate method based on problem characteristics:
- •
'BFGS'for smooth, unconstrained problems - •
'L-BFGS-B'for bounded problems - •
'SLSQP'for constrained optimization - •
'Nelder-Mead'for non-differentiable functions
- •
- •Provide gradients when available for faster convergence
- •Use
scipy.optimize.curve_fit()for nonlinear least squares fitting - •Use
scipy.optimize.root()for finding roots of equations
scipy.linalg - Linear Algebra
- •Prefer
scipy.linalgovernumpy.linalgfor additional functionality - •Use
scipy.linalg.solve()instead of computing matrix inverse - •Leverage specialized solvers for structured matrices (banded, triangular)
- •Use
scipy.linalg.lu_factor()andlu_solve()for multiple right-hand sides - •Use sparse matrix solvers from
scipy.sparse.linalgfor large sparse systems
scipy.stats - Statistics
- •Use distribution objects for probability calculations
- •Leverage
scipy.stats.describe()for summary statistics - •Use hypothesis testing functions:
ttest_ind(),chi2_contingency(),mannwhitneyu() - •Generate random samples with
.rvs()method on distributions - •Use
.fit()for parameter estimation from data
scipy.interpolate - Interpolation
- •Use
scipy.interpolate.interp1d()for 1D interpolation - •Use
scipy.interpolate.griddata()for scattered data interpolation - •Choose appropriate interpolation method: 'linear', 'cubic', 'nearest'
- •Use spline functions for smooth interpolation:
UnivariateSpline,BSpline - •Consider
RegularGridInterpolatorfor regular grid data
scipy.integrate - Integration
- •Use
scipy.integrate.quad()for single integrals - •Use
scipy.integrate.dblquad(),tplquad()for multiple integrals - •Use
scipy.integrate.solve_ivp()for ordinary differential equations - •Choose appropriate ODE method: 'RK45', 'BDF', 'LSODA'
- •Provide Jacobian for stiff systems to improve performance
scipy.signal - Signal Processing
- •Use
scipy.signal.butter(),cheby1(),ellip()for filter design - •Apply filters with
scipy.signal.filtfilt()for zero-phase filtering - •Use
scipy.signal.welch()for power spectral density estimation - •Use
scipy.signal.find_peaks()for peak detection - •Leverage
scipy.signal.convolve()andcorrelate()for convolution
scipy.sparse - Sparse Matrices
- •Use appropriate sparse format for your use case:
- •
csr_matrixfor efficient row slicing and matrix-vector products - •
csc_matrixfor efficient column slicing - •
coo_matrixfor constructing sparse matrices - •
lil_matrixfor incremental construction
- •
- •Convert to optimal format before operations
- •Use
scipy.sparse.linalgsolvers for sparse linear systems
Performance Optimization
- •Use appropriate data types (
float64for precision,float32for memory) - •Leverage BLAS/LAPACK through SciPy for optimized linear algebra
- •Pre-allocate arrays when possible
- •Use in-place operations when available
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
np.testing.assert_allclose()for numerical comparisons - •Test edge cases and boundary conditions
- •Verify conservation laws and invariants
Key Conventions
- •Import specific submodules:
from scipy import optimize, stats, linalg - •Use
snake_casefor variables and functions - •Document algorithm choices and parameters
- •Include convergence diagnostics in output