SciPy Cheatsheet
Overview
Use this SciPy reference while you build software engineering projects, review code for technical interview prep, or polish examples for a software engineer resume.
What is SciPy
SciPy is a Python library for scientific and technical computing built on top of NumPy. It provides algorithms for optimization, integration, interpolation, linear algebra, statistics, signal processing, and more.
import scipy print(scipy.__version__) # e.g. '1.16.2'
Installation
# pip pip install scipy # conda conda install scipy # common companion packages (NumPy is a hard dependency) pip install scipy numpy matplotlib
Submodule Map
| Submodule | Import | Purpose |
|---|---|---|
scipy.optimize | from scipy.optimize import minimize | Optimization & root-finding |
scipy.linalg | from scipy.linalg import solve | Linear algebra (prefer over numpy.linalg) |
scipy.stats | from scipy.stats import norm | Probability distributions & stats tests |
scipy.interpolate | from scipy.interpolate import interp1d | Interpolation |
scipy.integrate | from scipy.integrate import quad | Numerical integration & ODEs |
scipy.signal | from scipy.signal import butter | Signal processing & filters |
scipy.sparse | from scipy.sparse import csr_array | Sparse matrices |
scipy.spatial | from scipy.spatial import KDTree | Spatial data structures |
scipy.special | from scipy.special import gamma | Special mathematical functions |
scipy.fft | from scipy.fft import fft | Fast Fourier Transforms |
scipy.ndimage | from scipy.ndimage import gaussian_filter | N-dimensional image processing |
scipy.io | from scipy.io import loadmat | File I/O (MATLAB, WAV, etc.) |
scipy.cluster | from scipy.cluster.hierarchy import linkage | Clustering algorithms |
Import Patterns
# Standard imports import numpy as np from scipy import linalg, optimize, stats # Direct function imports (most common in practice) from scipy.optimize import minimize, curve_fit from scipy.linalg import solve, eig, svd from scipy.stats import norm, ttest_ind, chi2_contingency from scipy.integrate import quad, solve_ivp from scipy.interpolate import interp1d, CubicSpline from scipy.signal import butter, filtfilt, find_peaks from scipy.sparse import csr_array, eye from scipy.spatial import KDTree, ConvexHull from scipy.special import gamma, erf, jv
NumPy vs SciPy
| Task | NumPy | SciPy | Notes |
|---|---|---|---|
Solve Ax=b | np.linalg.solve | scipy.linalg.solve | scipy supports more options |
| Eigenvalues | np.linalg.eig | scipy.linalg.eig | scipy is generally preferred |
| SVD | np.linalg.svd | scipy.linalg.svd | scipy is more complete |
| FFT | np.fft.fft | scipy.fft.fft | scipy is faster for large arrays |
| Statistics | np.mean, np.std | scipy.stats.* | scipy has full distributions |
Rule of thumb: When both exist, prefer
scipy.linalgovernumpy.linalg— scipy's version is backed by LAPACK and typically faster and more numerically stable.
Array vs Matrix Types
import numpy as np from scipy.sparse import csr_array, csr_matrix # Modern SciPy (1.8+) prefers sparse *arrays* over sparse *matrices* # csr_array follows ndarray semantics; csr_matrix is deprecated-ish arr = csr_array([[1, 0], [0, 2]]) # preferred mat = csr_matrix([[1, 0], [0, 2]]) # legacy, still works # Dense arrays: SciPy works with standard numpy ndarrays a = np.array([1.0, 2.0, 3.0])
Common Patterns
# Pattern 1: Check for success on optimization results from scipy.optimize import minimize result = minimize(lambda x: x**2, x0=1.0) if result.success: print(result.x) else: print("Failed:", result.message) # Pattern 2: Always pass float arrays to SciPy a = np.array([1, 2, 3], dtype=float) # not int # Pattern 3: Use full_output / optional returns from scipy.integrate import quad val, err = quad(np.sin, 0, np.pi) print(f"Result: {val:.6f}, Error estimate: {err:.2e}")
Versioning & Deprecations
# 1.8+: sparse *arrays* (csr_array, ...) are the recommended interface; # sparse matrices (csr_matrix, ...) are legacy # 1.12: integrate.quadrature and integrate.romberg deprecated (removed in 1.15) # 1.15: special.sph_harm deprecated in favor of special.sph_harm_y (removed in 1.17) # odeint is legacy — solve_ivp has been the recommended ODE API since 1.0 import scipy scipy.show_config() # show BLAS/LAPACK backend scipy.__version__ # check version
File I/O Quick Reference
from scipy.io import loadmat, savemat, wavfile # MATLAB .mat files data = loadmat('data.mat') # returns dict savemat('out.mat', {'x': arr}) # WAV audio rate, samples = wavfile.read('audio.wav') wavfile.write('out.wav', rate, samples) # NetCDF, HDF5: use netCDF4 or h5py directly (scipy.io.netcdf is deprecated)