scipy-best-practices

Best practices for SciPy scientific computing, optimization, signal processing, and statistical analysis in Python

Skill file

Preview skill file
---
name: scipy-best-practices
description: Best practices for SciPy scientific computing, optimization, signal processing, and statistical analysis in Python
---

# 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.linalg` over `numpy.linalg` for additional functionality
- Use `scipy.linalg.solve()` instead of computing matrix inverse
- Leverage specialized solvers for structured matrices (banded, triangular)
- Use `scipy.linalg.lu_factor()` and `lu_solve()` for multiple right-hand sides
- Use sparse matrix solvers from `scipy.sparse.linalg` for 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 `RegularGridInterpolator` for 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()` and `correlate()` for convolution

## scipy.sparse - Sparse Matrices

- Use appropriate sparse format for your use case:
  - `csr_matrix` for efficient row slicing and matrix-vector products
  - `csc_matrix` for efficient column slicing
  - `coo_matrix` for constructing sparse matrices
  - `lil_matrix` for incremental construction
- Convert to optimal format before operations
- Use `scipy.sparse.linalg` solvers for sparse linear systems

## Performance Optimization

- Use appropriate data types (`float64` for precision, `float32` for 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_case` for variables and functions
- Document algorithm choices and parameters
- Include convergence diagnostics in output

Source

Creator's repository · mindrally/skills

View on GitHub

Security

Security checks in progress
Results will appear here once audits complete
What this skill can do
Reads your filesConnects to the internetRuns code on your machine
Checked by 3 independent security firms
Does it try to trick the AI?Not yet checkedPending · Gen Agent Trust Hub
Does it sneak in hidden code?Not yet checkedPending · Socket
Does it have known bugs?Not yet checkedPending · Snyk