Best practices for SciPy scientific computing, optimization, signal processing, and statistical analysis in Python
Install
npx skills add https://github.com/mindrally/skills --skill scipy-best-practicesSKILL.md
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 productscsc_matrixfor efficient column slicingcoo_matrixfor constructing sparse matriceslil_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
Related skills
researchmattpocock575KInvestigate a question against high-trust primary sources and capture the findings as a Markdown file in the repo. Use when the user wants a topic researched, docs or API facts gathered, or reading legwork delegated to a background agent.paper-context-resolverlllllllama451KRigor Paper Context helper for README-first deep learning repo reproduction. Use only when the README and repository files leave a narrow reproduction-critical gap and the task is to resolve a specific paper detail such as dataset split, preprocessing, evaluation protocol, checkpoint mapping, or runtime assumption from primary paper sources while recording conflicts. Do not use for general paper summary, repo scanning, environment setup, command execution, title-only paper lookup, or replacing Renv-and-assets-bootstraplllllllama450KRigor Setup skill for README-first deep learning repo reproduction. Use when the task is specifically to prepare a conservative conda-first environment, checkpoint and dataset path assumptions, cache location hints, and setup notes before any run on a README-documented repository. Do not use for repo scanning, full orchestration, paper interpretation, final run reporting, or generic environment setup that is not tied to a specific reproduction target.ai-research-explorelllllllama311KRigor Explore compatible skill slug for meaningful and potentially novel deep learning research candidates. Use when the researcher has chosen the task family, dataset, benchmark, evaluation method, provided SOTA references, and wants candidate-only exploration on top of `current_research` with auditable repo understanding, idea gating, fair comparison, and governed experiments written to `explore_outputs/`. Do not use for README-first trusted reproduction, open-ended direction finding, narrow c