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

SubmoduleImportPurpose
scipy.optimizefrom scipy.optimize import minimizeOptimization & root-finding
scipy.linalgfrom scipy.linalg import solveLinear algebra (prefer over numpy.linalg)
scipy.statsfrom scipy.stats import normProbability distributions & stats tests
scipy.interpolatefrom scipy.interpolate import interp1dInterpolation
scipy.integratefrom scipy.integrate import quadNumerical integration & ODEs
scipy.signalfrom scipy.signal import butterSignal processing & filters
scipy.sparsefrom scipy.sparse import csr_arraySparse matrices
scipy.spatialfrom scipy.spatial import KDTreeSpatial data structures
scipy.specialfrom scipy.special import gammaSpecial mathematical functions
scipy.fftfrom scipy.fft import fftFast Fourier Transforms
scipy.ndimagefrom scipy.ndimage import gaussian_filterN-dimensional image processing
scipy.iofrom scipy.io import loadmatFile I/O (MATLAB, WAV, etc.)
scipy.clusterfrom scipy.cluster.hierarchy import linkageClustering 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

TaskNumPySciPyNotes
Solve Ax=bnp.linalg.solvescipy.linalg.solvescipy supports more options
Eigenvaluesnp.linalg.eigscipy.linalg.eigscipy is generally preferred
SVDnp.linalg.svdscipy.linalg.svdscipy is more complete
FFTnp.fft.fftscipy.fft.fftscipy is faster for large arrays
Statisticsnp.mean, np.stdscipy.stats.*scipy has full distributions

Rule of thumb: When both exist, prefer scipy.linalg over numpy.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)