SciPy

Fundamental algorithms for scientific computing, optimization, and statistics in Python.

Library
PyPI
v1.18.1
15,144 stars
BSD 3-Clause License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum. How we score it →
98 /100 Excellent
Development Activity 100
Maintenance 96
Community 96
Maturity 60
Momentum 40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation. How we score it →
80 /100 Excellent
Architecture 88
Code Quality 92
Innovation 85
Learning Curve 55

SciPy is the foundational Python library for scientific and technical computing, built directly on top of NumPy arrays. It provides efficient, well-tested implementations of algorithms for optimization, linear algebra, integration, interpolation, signal and image processing, statistics, sparse matrices, and special functions, most of which wrap decades-proven Fortran and C numerical libraries (LAPACK, BLAS, FFTPACK, and more).

Used throughout academia, engineering, and industry, SciPy is one of the core pillars of the Python scientific computing stack (alongside NumPy, Matplotlib, and pandas). It powers everything from research notebooks to production data pipelines, giving Python the numerical horsepower to compete with MATLAB and specialized scientific software while remaining free and open source.

What You Get

  • scipy.optimize - local/global minimization, root finding, linear programming, curve fitting, and least-squares solvers
  • scipy.stats - hundreds of continuous and discrete probability distributions plus statistical tests and descriptive stats
  • scipy.linalg - a full LAPACK/BLAS-backed linear algebra API (decompositions, eigenvalues, matrix functions) that extends numpy.linalg
  • scipy.sparse and scipy.sparse.linalg - sparse matrix formats and solvers for large, mostly-zero systems
  • scipy.signal and scipy.fft - signal processing primitives (filtering, convolution, spectral analysis) and fast Fourier transforms
  • scipy.spatial, scipy.ndimage, scipy.interpolate, scipy.integrate - spatial data structures/KD-trees, N-dimensional image processing, interpolation, and ODE/quadrature integration

Common Use Cases

  • Numerically minimizing a cost function or fitting a model’s parameters to experimental data with scipy.optimize.minimize or curve_fit
  • Running statistical hypothesis tests (t-tests, ANOVA, KS tests) and working with probability distributions via scipy.stats
  • Solving large sparse linear systems (e.g., from finite-element or graph problems) with scipy.sparse.linalg
  • Filtering, resampling, or spectrally analyzing sensor/audio signals with scipy.signal and scipy.fft
  • Performing nearest-neighbor spatial queries or Delaunay triangulation with scipy.spatial.cKDTree

Under The Hood

Architecture: SciPy is organized as a set of largely independent topical subpackages (optimize, stats, linalg, sparse, signal, spatial, integrate, interpolate, fft, ndimage, special, cluster, constants, io, misc) under a single top-level namespace, each with its own __init__.py documenting its public API via NumPy-style docstrings rendered into Sphinx docs. Performance-critical routines are implemented in C, C++, Cython, or wrapped Fortran (LAPACK/BLAS/FFTPACK/ODEPACK-derived code), with thin Python layers providing a uniform, discoverable interface; the scipy._lib subpackage centralizes internal utilities (deprecation helpers, array-API compatibility shims, testing utilities) shared across subpackages. The build is driven by Meson (meson-python backend) with Pythran, pybind11, and Cython all used as needed per extension module — a notably heterogeneous but disciplined multi-language build compared to typical pure-Python packages.

Tech Stack: Core dependency is NumPy (>=2.0) for array types; optional extras (pooch for dataset downloads, matplotlib for a handful of plotting helpers, threadpoolctl) are isolated behind optional-dependencies. The project increasingly supports the Python array-API standard so array-backed code can run on non-NumPy backends (e.g., CuPy, PyTorch tensors) via xp_capabilities markers seen throughout the test suite. Requires Python >=3.12 for the current development branch, with wheels built per-platform since much of the codebase is compiled.

Code Quality: The test suite (pytest-based, configured in pytest.ini) is extensive, with custom markers for slow/xslow tests, array-API backend parametrization, thread-safety annotations, and ASAN-related exclusions, reflecting a mature, rigorously validated codebase with 1,900+ contributors and a documented AI-contribution policy. Docstrings follow the NumPy documentation standard consistently across the ~20 subpackages, and the CONTRIBUTING guide enforces unit tests, docs, and code style on every PR.

API Design: Functions like minimize() and curve_fit() use a consistent “one function, method= string selects the algorithm” pattern, returning a uniform OptimizeResult/Bunch-style object across dozens of underlying solvers — a deliberate design choice that trades a slightly larger single-function signature for a highly discoverable, swappable-backend API. This uniformity is a major reason SciPy is approachable despite covering an enormous algorithmic surface area.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers