1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158
|
.. _routines.linalg:
.. module:: numpy.linalg
Linear algebra
==============
The NumPy linear algebra functions rely on BLAS and LAPACK to provide efficient
low level implementations of standard linear algebra algorithms. Those
libraries may be provided by NumPy itself using C versions of a subset of their
reference implementations but, when possible, highly optimized libraries that
take advantage of specialized processor functionality are preferred. Examples
of such libraries are OpenBLAS_, MKL (TM), and ATLAS. Because those libraries
are multithreaded and processor dependent, environmental variables and external
packages such as threadpoolctl_ may be needed to control the number of threads
or specify the processor architecture.
.. _OpenBLAS: https://www.openblas.net/
.. _threadpoolctl: https://github.com/joblib/threadpoolctl
The SciPy library also contains a `~scipy.linalg` submodule, and there is
overlap in the functionality provided by the SciPy and NumPy submodules. SciPy
contains functions not found in `numpy.linalg`, such as functions related to
LU decomposition and the Schur decomposition, multiple ways of calculating the
pseudoinverse, and matrix transcendentals such as the matrix logarithm. Some
functions that exist in both have augmented functionality in `scipy.linalg`.
For example, `scipy.linalg.eig` can take a second matrix argument for solving
generalized eigenvalue problems. Some functions in NumPy, however, have more
flexible broadcasting options. For example, `numpy.linalg.solve` can handle
"stacked" arrays, while `scipy.linalg.solve` accepts only a single square
array as its first argument.
.. note::
The term *matrix* as it is used on this page indicates a 2d `numpy.array`
object, and *not* a `numpy.matrix` object. The latter is no longer
recommended, even for linear algebra. See
:ref:`the matrix object documentation<matrix-objects>` for
more information.
The ``@`` operator
------------------
Introduced in NumPy 1.10.0, the ``@`` operator is preferable to
other methods when computing the matrix product between 2d arrays. The
:func:`numpy.matmul` function implements the ``@`` operator.
.. currentmodule:: numpy
Matrix and vector products
--------------------------
.. autosummary::
:toctree: generated/
dot
linalg.multi_dot
vdot
vecdot
linalg.vecdot
inner
outer
linalg.outer
matmul
linalg.matmul (Array API compatible location)
matvec
vecmat
tensordot
linalg.tensordot (Array API compatible location)
einsum
einsum_path
linalg.matrix_power
kron
linalg.cross
Decompositions
--------------
.. autosummary::
:toctree: generated/
linalg.cholesky
linalg.qr
linalg.svd
linalg.svdvals
Matrix eigenvalues
------------------
.. autosummary::
:toctree: generated/
linalg.eig
linalg.eigh
linalg.eigvals
linalg.eigvalsh
Norms and other numbers
-----------------------
.. autosummary::
:toctree: generated/
linalg.norm
linalg.matrix_norm (Array API compatible)
linalg.vector_norm (Array API compatible)
linalg.cond
linalg.det
linalg.matrix_rank
linalg.slogdet
trace
linalg.trace (Array API compatible)
Solving equations and inverting matrices
----------------------------------------
.. autosummary::
:toctree: generated/
linalg.solve
linalg.tensorsolve
linalg.lstsq
linalg.inv
linalg.pinv
linalg.tensorinv
Other matrix operations
-----------------------
.. autosummary::
:toctree: generated/
diagonal
linalg.diagonal (Array API compatible)
linalg.matrix_transpose (Array API compatible)
Exceptions
----------
.. autosummary::
:toctree: generated/
linalg.LinAlgError
.. _routines.linalg-broadcasting:
Linear algebra on several matrices at once
------------------------------------------
Several of the linear algebra routines listed above are able to
compute results for several matrices at once, if they are stacked into
the same array.
This is indicated in the documentation via input parameter
specifications such as ``a : (..., M, M) array_like``. This means that
if for instance given an input array ``a.shape == (N, M, M)``, it is
interpreted as a "stack" of N matrices, each of size M-by-M. Similar
specification applies to return values, for instance the determinant
has ``det : (...)`` and will in this case return an array of shape
``det(a).shape == (N,)``. This generalizes to linear algebra
operations on higher-dimensional arrays: the last 1 or 2 dimensions of
a multidimensional array are interpreted as vectors or matrices, as
appropriate for each operation.
|