Return the Cholesky decomposition, L * L.T, of the square matrix a,
where L is lower-triangular and .T is the transpose operator. a must be
symmetric and positive-definite. Only L is actually returned. Complex-valued
input is currently not supported.
Parameters:
a ((..., M, M) ndarray) – Symmetric, positive-definite input matrix.
upper (bool) – If True, the result must be the upper-triangular Cholesky factor.
If False, the result must be the lower-triangular Cholesky factor.
Default: False.
The condition number of x is defined as the norm of x times the
norm of the inverse of x [1]_; the norm can be the usual L2-norm
(root-of-sum-of-squares) or one of a number of other matrix norms.
If a and b are multi-dimensional arrays (i.e., both have a rank greater than 1),
then the cross-product of each pair of corresponding 3-element vectors is independently computed.
Another way to represent the determinant, more suitable
for
Notes
Broadcasting rules apply, see the numpy.linalg documentation for
details.
The determinant is computed via LU factorization using the LAPACK
routine z/dgetrf.
Examples
The determinant of a 2-D array [[a, b], [c, d]] is ad - bc:
>>> a = np.array([[1, 2], [3, 4]])
>>> np.linalg.det(a)
-2.0
Computing determinants for a stack of matrices:
>>> a = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
>>> a.shape
(3, 2, 2)
Extracts or constructs kth diagonal given input array.
Offset specifying the off-diagonal relative to the main diagonal.
offset = 0 : the main diagonal.
offset > 0 : off-diagonal above the main diagonal.
offset < 0 : off-diagonal below the main diagonal.
Default: 0.
Returns:
out – An array containing the diagonals and whose shape is determined by removing the last two dimensions and
appending a dimension equal to the size of the resulting diagonals.
The returned array must have the same data type as a.
Compute the eigenvalues and right eigenvectors of a square array.
Parameters:
a ((..., M, M) ndarray) – Matrices for which the eigenvalues and right eigenvectors will
be computed
Returns:
w ((…, M) ndarray) – The eigenvalues, each repeated according to its multiplicity.
The eigenvalues are not necessarily ordered.
v ((…, M, M) ndarray) – The normalized (unit “length”) eigenvectors, such that the
column v[:,i] is the eigenvector corresponding to the
eigenvalue w[i].
Raises:
MXNetError – If the eigenvalue computation does not converge.
This is implemented using the _geev LAPACK routines which compute the eigenvalues and eigenvectors of general square arrays. The number w is an eigenvalue of a if there exists a vector v such that dot(a,v)=w*v. Thus, the arrays a, w, and v satisfy the equations dot(a[:,:],v[:,i])=w[i]*v[:,i]
for
math:i \in \{0,…,M-1\}. The array v of eigenvectors may not be of maximum rank, that is, some of the columns may be linearly dependent, although round-off error may obscure that fact. If the eigenvalues are all different, then theoretically the eigenvectors are linearly independent. This function differs from the original numpy.linalg.eig in the following way(s): * Does not support complex input and output.
Return the eigenvalues and eigenvectors real symmetric matrix.
Returns two objects, a 1-D array containing the eigenvalues of a, and
a 2-D square array or matrix (depending on the input type) of the
corresponding eigenvectors (in columns).
Parameters:
a ((..., M, M) ndarray) – real symmetric matrices whose eigenvalues and eigenvectors are to be computed.
UPLO ({'L', 'U'}, optional) – Specifies whether the calculation is done with the lower triangular
part of a (‘L’, default) or the upper triangular part (‘U’).
Irrespective of this value only the real parts of the diagonal will
be considered in the computation to preserve the notion of a Hermitian
matrix. It therefore follows that the imaginary part of the diagonal
will always be treated as zero.
Returns:
w ((…, M) ndarray) – The eigenvalues in ascending order, each repeated according to
its multiplicity.
v ({(…, M, M) ndarray, (…, M, M) matrix}) – The column v[:,i] is the normalized eigenvector corresponding
to the eigenvalue w[i]. Will return a matrix object if a is
a matrix object.
Raises:
MXNetError – If the eigenvalue computation does not converge.
The eigenvalues/eigenvectors are computed using LAPACK routines _syevd. This function differs from the original numpy.linalg.eigh in the following way(s): * Does not support complex input and output.
Broadcasting rules apply, see the numpy.linalg documentation for details. This is implemented using the _geev LAPACK routines which compute the eigenvalues and eigenvectors of general square arrays. This function differs from the original numpy.linalg.eigvals in the following way(s): * Does not support complex input and output.
Examples
Illustration, using the fact that the eigenvalues of a diagonal matrix
are its diagonal elements, that multiplying a matrix on the left
by an orthogonal matrix, Q, and on the right by Q.T (the transpose
of Q), preserves the eigenvalues of the “middle” matrix. In other words,
if Q is orthogonal, then Q*A*Q.T has the same eigenvalues as
A:
Main difference from eigh: the eigenvectors are not computed.
Parameters:
a ((..., M, M) ndarray) – A real-valued matrix whose eigenvalues are to be computed.
UPLO ({'L', 'U'}, optional) – Specifies whether the calculation is done with the lower triangular
part of a (‘L’, default) or the upper triangular part (‘U’).
Irrespective of this value only the real parts of the diagonal will
be considered in the computation to preserve the notion of a Hermitian
matrix. It therefore follows that the imaginary part of the diagonal
will always be treated as zero.
Returns:
w – The eigenvalues in ascending order, each repeated according to
its multiplicity.
eigenvalues and eigenvectors of a real symmetric array.
Broadcasting rules apply, see the numpy.linalg documentation for details. The eigenvalues are computed using LAPACK routines _syevd. This function differs from the original numpy.linalg.eigvalsh in the following way(s): * Does not support complex input and output.
Examples
>>> fromnumpyimportlinalgasLA>>> a=np.array([[5.4119368,8.996273,-5.086096],... [0.8866155,1.7490431,-4.6107802],... [-0.08034172,4.4172044,1.4528792]])>>> LA.eigvalsh(a,UPLO='L')array([-2.87381886, 5.10144682, 6.38623114]) # in ascending order
Return the least-squares solution to a linear matrix equation.
Solves the equation \(a x = b\) by computing a vector x that
minimizes the squared Euclidean 2-norm \(\| b - a x \|^2_2\).
The equation may be under-, well-, or over-determined (i.e., the
number of linearly independent rows of a can be less than, equal
to, or greater than its number of linearly independent columns).
If a is square and of full rank, then x (but for round-off error)
is the “exact” solution of the equation.
b ({(M,), (M, K)} ndarray) – Ordinate or “dependent variable” values. If b is two-dimensional,
the least-squares solution is calculated for each of the K columns
of b.
rcond (float, optional) – Cut-off ratio for small singular values of a.
For the purposes of rank determination, singular values are treated
as zero if they are smaller than rcond times the largest singular
value of a
The default of warn or -1 will use the machine precision as
rcond parameter. The default of None will use the machine
precision times max(M, N).
Returns:
x ({(N,), (N, K)} ndarray) – Least-squares solution. If b is two-dimensional,
the solutions are in the K columns of x.
residuals ({(1,), (K,), (0,)} ndarray) – Sums of residuals.
Squared Euclidean 2-norm for each column in b-a*x.
If the rank of a is < N or M <= N, this is an empty array.
If b is 1-dimensional, this is a (1,) shape array.
Otherwise the shape is (K,).
rank (int) – Rank of matrix a.
s ((min(M, N),) ndarray) – Singular values of a.
Raises:
MXNetError – If computation does not converge.
Notes
If b is a matrix, then all array results are returned as matrices.
Computes the matrix norm of a matrix (or a stack of matrices) x.
Parameters:
x (ndarray) – Input array. Should have a floating-point data type.
ord ({non-zero int, inf, -inf, ‘fro’, ‘nuc’}, optional) – Order of the norm.
axis ({2-tuple of ints}) – a 2-tuple which specifies the axes (dimensions) defining two-dimensional
matrices for which to compute matrix norms.
keepdims (bool, optional) – If this is set to True, the axes which are normed over are left in the
result as dimensions with size one. With this option the result will
broadcast correctly against the original x.
For positive integers n, the power is computed by repeated matrix
squarings and matrix multiplications. If n==0, the identity matrix
of the same shape as M is returned. If n<0, the inverse
is computed and then raised to the abs(n).
Note
Stacks of object matrices are not currently supported.
Parameters:
a ((..., M, M) array_like) – Matrix to be “powered”.
n (int) – The exponent can be any integer or long integer, positive,
negative, or zero.
Returns:
a**n – The return value is the same shape and type as M;
if the exponent is positive or zero then the type of the
elements is the same as those of M. If the exponent is
negative the elements are floating-point.
M ({(M,), (..., M, N)} ndarray) – Input vector or stack of matrices.
rtol ((...) ndarray, float, optional) – Threshold below which SVD values are considered zero. If rtol is
None, and S is an array with singular values for M, and
eps is the epsilon value for datatype of S, then rtol is
set to S.max()*max(M.shape)*eps.
hermitian (bool, optional) – If True, M is assumed to be Hermitian (symmetric if real-valued),
enabling a more efficient method for finding singular values.
Default: False.
Compute the dot product of two or more arrays in a single function call,
while automatically selecting the fastest evaluation order.
multi_dot chains numpy.dot and uses optimal parenthesization
of the matrices [1]_[2]. Depending on the shapes of the matrices,
this can speed up the multiplication a lot.
If the first argument is 1-D it is treated as a row vector.
If the last argument is 1-D it is treated as a column vector.
The other arguments must be 2-D.
arrays (sequence of array_like) – If the first argument is 1-D it is treated as row vector.
If the last argument is 1-D it is treated as column vector.
The other arguments must be 2-D.
Output argument. This must have the exact kind that would be returned
if it was not used. In particular, it must have the right type, must be
C-contiguous, and its dtype must be the dtype that would be returned
for dot(a, b). This is a performance feature. Therefore, if these
conditions are not met, an exception is raised, instead of attempting
to be flexible.
Added in version 1.19.0.
Returns:
output – Returns the dot product of the supplied arrays.
axis ({int, 2-tuple of ints, None}, optional) – If axis is an integer, it specifies the axis of x along which to
compute the vector norms. If axis is a 2-tuple, it specifies the
axes that hold 2-D matrices, and the matrix norms of these matrices
are computed. If axis is None, the norm of the whole ndarray is
returned.
keepdims (bool, optional) – If this is set to True, the axes which are normed over are left in the
result as dimensions with size one. With this option the result will
broadcast correctly against the original x.
a (ndarray) – One-dimensional input array of size N . Should have a numeric data type.
b (ndarray) – One-dimensional input array of size M . Should have a numeric data type.
Returns:
out – A two-dimensional array containing the outer product and whose shape is (N, M).
The returned array must have a data type determined by Type Promotion Rules.
a ((..., M, N) ndarray) – Matrix or stack of matrices to be pseudo-inverted.
rtol ((...) {float or ndarray of float}, optional) – Cutoff for small singular values.
Singular values less than or equal to
rtol*largest_singular_value are set to zero.
Broadcasts against the stack of matrices.
hermitian (bool, optional) – If True, a is assumed to be Hermitian (symmetric if real-valued),
enabling a more efficient method for finding singular values.
Defaults to False.
Returns:
B – The pseudo-inverse of a. If a is a matrix instance, then so
is B.
MXNetError – If the SVD computation does not converge.
Notes
The pseudo-inverse of a matrix A, denoted \(A^+\), is
defined as: “the matrix that ‘solves’ [the least-squares problem]
\(Ax = b\),” i.e., if \(\\bar{x}\) is said solution, then
\(A^+\) is that matrix such that \(\\bar{x} = A^+b\).
It can be shown that if \(Q_1 \\Sigma Q_2^T = A\) is the singular
value decomposition of A, then
\(A^+ = Q_2 \\Sigma^+ Q_1^T\), where \(Q_{1,2}\) are
orthogonal matrices, \(\\Sigma\) is a diagonal matrix consisting
of A’s so-called singular values, (followed, typically, by
zeros), and then \(\\Sigma^+\) is simply the diagonal matrix
consisting of the reciprocals of A’s singular values
(again, followed by zeros). [1]_
References
Examples
The following example checks that a*a+*a==a and
a+*a*a+==a+:
>>> a = np.random.randn(2, 3)
>>> pinv_a = np.linalg.pinv(a)
>>> (a - np.dot(a, np.dot(pinv_a, a))).sum()
array(0.)
>>> (pinv_a - np.dot(pinv_a, np.dot(a, pinv_a))).sum()
array(0.)
Compute the qr factorization of a matrix a.
Factor the matrix a as qr, where q is orthonormal and r is upper-triangular.
Parameters:
a ((..., M, N) ndarray) – Matrix or stack of matrices to be qr factored.
mode ({‘reduced’, ‘complete’, ‘r’, ‘raw’, ‘full’, ‘economic’}, optional) – Only default mode, ‘reduced’, is implemented. If K = min(M, N), then
* ‘reduced’ : returns q, r with dimensions (M, K), (K, N) (default)
Returns:
q ((…, M, K) ndarray) – A matrix or stack of matrices with K orthonormal columns, with K = min(M, N).
r ((…, K, N) ndarray) – A matrix or stack of upper triangular matrices.
Raises:
MXNetError – If factoring fails.
Notes
Currently, the gradient for the QR factorization is well-defined
only when the first K columns of the input matrix are linearly independent.
Compute the sign and (natural) logarithm of the determinant of an array.
If an array has a very small or very large determinant, then a call to
det may overflow or underflow. This routine is more robust against such
issues, because it computes the logarithm of the determinant rather than
the determinant itself.
Parameters:
a ((..., M, M) ndarray) – Input array, has to be a square 2-D array.
Returns:
sign ((…) ndarray) – A number representing the sign of the determinant. For a real matrix,
this is 1, 0, or -1.
logdet ((…) array_like) – The natural log of the absolute value of the determinant.
If the determinant is zero, then sign will be 0 and logdet will be
-Inf. In all cases, the determinant is equal to sign*np.exp(logdet).
Broadcasting rules apply, see the numpy.linalg documentation for
details.
The determinant is computed via LU factorization using the LAPACK
routine z/dgetrf.
Examples
The determinant of a 2-D array [[a,b],[c,d]] is ad-bc:
>>> a = np.array([[1, 2], [3, 4]])
>>> (sign, logdet) = np.linalg.slogdet(a)
>>> (sign, logdet)
(-1., 0.69314718055994529)
>>> sign*np.exp(logdet)-2.0
Computing log-determinants for a stack of matrices:
>>> a = np.array([ [[1, 2], [3, 4]], [[1, 2], [2, 1]], [[1, 3], [3, 1]] ])
>>> a.shape
(3, 2, 2)
This routine succeeds where ordinary det does not:
>>> np.linalg.det(np.eye(500) * 0.1)
0.0
>>> np.linalg.slogdet(np.eye(500) * 0.1)
(1., -1151.2925464970228)
b ({(..., M,), (..., M, K)}, ndarray) – Ordinate or “dependent variable” values.
Returns:
x – Solution to the system a x = b. Returned shape is identical to b.
Return type:
{(…, M,), (…, M, K)} ndarray
Raises:
MXNetError – If a is singular or not square.
Notes
Broadcasting rules apply, see the numpy.linalg documentation for
details.
The solutions are computed using LAPACK routine _gesv.
a must be square and of full-rank, i.e., all rows (or, equivalently,
columns) must be linearly independent; if either is not true, use
lstsq for the least-squares best “solution” of the
system/equation.
Examples
Solve the system of equations 3*x0+x1=9 and x0+2*x1=8:
When a is a 2D array, it is factorized as ut@np.diag(s)@v,
where ut and v are 2D orthonormal arrays and s is a 1D
array of a’s singular values. When a is higher-dimensional, SVD is
applied in stacked mode as explained below.
Parameters:
a ((..., M, N) ndarray) – A real array with a.ndim>=2 and M<=N.
Returns:
ut ((…, M, M) ndarray) – Orthonormal array(s). The first a.ndim-2 dimensions have the same
size as those of the input a.
s ((…, M) ndarray) – Vector(s) with the singular values, within each vector sorted in
descending order. The first a.ndim-2 dimensions have the same
size as those of the input a.
v ((…, M, N) ndarray) – Orthonormal array(s). The first a.ndim-2 dimensions have the same
size as those of the input a.
.. note:: – The decomposition is performed using LAPACK routine _gesvd.
SVD is usually described for the factorization of a 2D matrix \(A\).
The higher-dimensional case will be discussed below. In the 2D case, SVD is
written as \(A = U^T S V\), where \(A = a\), \(U^T = ut\),
\(S= \mathtt{np.diag}(s)\) and \(V = v\). The 1D array s
contains the singular values of a and ut and v are orthonormal. The rows
of v are the eigenvectors of \(A^T A\) and the columns of ut are
the eigenvectors of \(A A^T\). In both cases the corresponding
(possibly non-zero) eigenvalues are given by s**2.
If a has more than two dimensions, then broadcasting rules apply.
This means that SVD is working in “stacked” mode: it iterates over
all indices of the first a.ndim-2 dimensions and for each
combination SVD is applied to the last two indices. The matrix a
can be reconstructed from the decomposition with either
(ut*s[...,None,:])@v or
ut@(s[...,None]*v). (The @ operator denotes batch matrix multiplication)
This function differs from the original numpy.linalg.svd in
the following way(s):
* The sign of rows of u and v may differ.
* Does not support complex input.
Computes the singular values of a matrix (or a stack of matrices) x.
Parameters:
a ((..., M, N) ndarray) – A real array with a.ndim>=2 and M<=N.
Returns:
out ((…, M) ndarray) – Vector(s) with the singular values, within each vector sorted in
descending order. The first a.ndim-2 dimensions have the same
size as those of the input a.
Number of axes to contract or explicit sequences of axes for a and b, respectively.
If axes is an int equal to N , then contraction must be performed over the last N axes of a
and the first N axes of b in order.
The size of each corresponding axis (dimension) must match. Must be nonnegative.
If N equals 0 , the result is the tensor (outer) product.
If N equals 1 , the result is the tensor dot product.
If N equals 2 , the result is the tensor double contraction (default).
Default: 2.
Returns:
out – An array containing the tensor contraction whose shape consists of the non-contracted axes (dimensions) of the
first array a, followed by the non-contracted axes (dimensions) of the second array b.
The result is an inverse for a relative to the tensordot operation
tensordot(a,b,ind), i. e., up to floating-point accuracy,
tensordot(tensorinv(a),a,ind) is the “identity” tensor for the
tensordot operation.
Parameters:
a (array_like) – Tensor to ‘invert’. Its shape must be ‘square’, i. e.,
prod(a.shape[:ind])==prod(a.shape[ind:]).
ind (int, optional) – Number of first indices that are involved in the inverse sum.
Must be a positive integer, default is 2.
Returns:
b – a’s tensordot inverse, shape a.shape[ind:]+a.shape[:ind].
Solve the tensor equation ax=b for x.
It is assumed that all indices of x are summed over in the product,
together with the rightmost indices of a, as is done in, for example,
tensordot(a,x,axes=b.ndim).
Parameters:
a (ndarray) – Coefficient tensor, of shape b.shape+Q. Q, a tuple, equals
the shape of that sub-tensor of a consisting of the appropriate
number of its rightmost indices, and must be such that
prod(Q)==prod(b.shape) (in which sense a is said to be
‘square’).
b (ndarray) – Right-hand tensor, which can be of any shape.
axes (tuple of ints, optional) – Axes in a to reorder to the right, before inversion.
If None (default), no reordering is done.
Offset specifying the off-diagonal relative to the main diagonal.
offset = 0 : the main diagonal.
offset > 0 : off-diagonal above the main diagonal.
offset < 0 : off-diagonal below the main diagonal.
Default: 0.
Returns:
out – An array containing the traces and whose shape is determined by removing the last two dimensions and storing
the traces in the last array dimension. For example, if a has rank k and shape (I, J, K, …, L, M, N),
then an output array has rank k-2 and shape (I, J, K, …, L)
where: out[i, j, k, …, l] = trace(a[i, j, k, …, l, :, :])
The returned array must have the same data type as a.
Return the dot product of two vectors.
Note that vecdot handles multidimensional arrays differently than dot:
it does not perform a matrix product, but flattens input arguments
to 1-D vectors first. Consequently, it should only be used for vectors.
axis (axis over which to compute the dot product. Must be an integer on) – the interval [-N, N) , where N is the rank (number of dimensions) of
the shape determined according to Broadcasting . If specified as a
negative integer, the function must determine the axis along which
to compute the dot product by counting backward from the last dimension
(where -1 refers to the last dimension). If None , the function must
compute the dot product over the last axis. Default: None .
Computes the vector norm of a vector (or batch of vectors) x.
Parameters:
x (ndarray) – Input array. Should have a floating-point data type.
ord ({non-zero int, inf, -inf}, optional) – Order of the norm.
axis ({int, n-tuple of ints, None}, optional) – If axis is an integer, it specifies the axis of x along which to
compute the vector norms. If axis is a n-tuple, it specifies the
axes along which to compute batched vector norms. If axis is None,
the norm of the whole ndarray is returned.
keepdims (bool, optional) – If this is set to True, the axes which are normed over are left in the
result as dimensions with size one. With this option the result will
broadcast correctly against the original x.