Skip to content

Module Organization

SciPy provides linear algebra functionality across multiple modules.

Core Modules

1. scipy.linalg

Dense matrix operations and decompositions.

from scipy import linalg

# Key functions
# linalg.lu, linalg.qr, linalg.svd
# linalg.eig, linalg.eigh
# linalg.solve, linalg.inv
# linalg.expm, linalg.logm

2. scipy.sparse

Sparse matrix classes and construction.

from scipy import sparse

# Sparse matrix formats
# sparse.csr_matrix, sparse.csc_matrix
# sparse.coo_matrix, sparse.lil_matrix
# sparse.dia_matrix, sparse.dok_matrix

3. scipy.sparse.linalg

Sparse linear algebra operations.

from scipy.sparse import linalg as splinalg

# Sparse solvers
# splinalg.spsolve, splinalg.splu
# splinalg.cg, splinalg.gmres
# splinalg.eigs, splinalg.eigsh

Module Overview

1. Hierarchy

scipy
├── linalg           # Dense operations
│   ├── decompositions (lu, qr, svd, cholesky, schur)
│   ├── eigenvalues (eig, eigh, eigvals)
│   ├── solvers (solve, solve_triangular, solve_banded)
│   ├── matrix functions (expm, logm, sqrtm)
│   └── special matrices (toeplitz, circulant, companion)
│
├── sparse           # Sparse matrix classes
│   ├── csr_matrix, csc_matrix
│   ├── coo_matrix, lil_matrix
│   └── construction functions
│
└── sparse.linalg    # Sparse operations
    ├── direct solvers (spsolve, splu)
    ├── iterative solvers (cg, gmres, bicg)
    └── eigensolvers (eigs, eigsh)

2. Import Patterns

import numpy as np
from scipy import linalg
from scipy import sparse
from scipy.sparse import linalg as splinalg

def main():
    # Dense matrix
    A_dense = np.array([[4, 1], [1, 3]])

    # Dense operations via scipy.linalg
    L = linalg.cholesky(A_dense, lower=True)
    print("Cholesky L:")
    print(L)
    print()

    # Sparse matrix
    A_sparse = sparse.csr_matrix(A_dense)

    # Sparse operations via scipy.sparse.linalg
    b = np.array([1, 2])
    x = splinalg.spsolve(A_sparse, b)
    print(f"Sparse solve: x = {x}")

if __name__ == "__main__":
    main()

Function Categories

1. Decompositions

Function Module Description
lu linalg LU factorization
qr linalg QR factorization
svd linalg Singular value decomposition
cholesky linalg Cholesky decomposition
schur linalg Schur decomposition
hessenberg linalg Hessenberg form

2. Eigenvalue Problems

Function Module Description
eig linalg General eigenvalues
eigh linalg Hermitian eigenvalues
eigvals linalg Eigenvalues only
eigs sparse.linalg Sparse eigenvalues
eigsh sparse.linalg Sparse Hermitian eigenvalues

3. Linear Solvers

Function Module Description
solve linalg Dense system solver
solve_triangular linalg Triangular solver
solve_banded linalg Banded matrix solver
spsolve sparse.linalg Sparse direct solver
cg sparse.linalg Conjugate gradient
gmres sparse.linalg GMRES iterative

4. Matrix Functions

Function Module Description
expm linalg Matrix exponential
logm linalg Matrix logarithm
sqrtm linalg Matrix square root
funm linalg General matrix function

Practical Usage

1. Dense Workflow

import numpy as np
from scipy import linalg

def main():
    A = np.random.randn(100, 100)
    A = A @ A.T  # Make symmetric positive definite
    b = np.random.randn(100)

    # Solve using Cholesky
    c, low = linalg.cho_factor(A)
    x = linalg.cho_solve((c, low), b)

    print(f"Solution norm: {np.linalg.norm(x):.4f}")
    print(f"Residual: {np.linalg.norm(A @ x - b):.2e}")

if __name__ == "__main__":
    main()

2. Sparse Workflow

import numpy as np
from scipy import sparse
from scipy.sparse import linalg as splinalg

def main():
    # Create sparse matrix
    n = 1000
    diags = [-np.ones(n-1), 2*np.ones(n), -np.ones(n-1)]
    A = sparse.diags(diags, [-1, 0, 1], format='csr')

    b = np.ones(n)

    # Solve sparse system
    x = splinalg.spsolve(A, b)

    print(f"Solution norm: {np.linalg.norm(x):.4f}")
    print(f"Residual: {np.linalg.norm(A @ x - b):.2e}")

if __name__ == "__main__":
    main()

Summary

1. Quick Reference

Task Module
Dense decompositions scipy.linalg
Dense solvers scipy.linalg
Matrix functions scipy.linalg
Sparse matrices scipy.sparse
Sparse solvers scipy.sparse.linalg
Sparse eigenvalues scipy.sparse.linalg