Linear algebra

The goal

Overview over the linear algebra functions of Numpy.

Questions to David Rotermund

There more functions in the scipy linalg package!!!

The @ operator

@ => Matrix product​

* => outer product A[i] * B[i]​

The @ operator is preferable to other methods when computing the matrix product between 2d arrays. The numpy.matmul function implements the @ operator.

import numpy as np

a = np.arange(0, 3).reshape(3, 1)
b = np.arange(4, 7).reshape(1, 3)

print(a)
print()
print(b)
print()
print(a @ b)
print()
print(b @ a)

Output:

[[0]
 [1]
 [2]]

[[4 5 6]]

[[ 0  0  0]
 [ 4  5  6]
 [ 8 10 12]]

[[17]]

For comparison the outer product:

import numpy as np

a = np.arange(0, 3).reshape(3, 1)
b = np.arange(4, 7).reshape(1, 3)

print(a * b)
print()
print(b * a)

Output:

[[ 0  0  0]
 [ 4  5  6]
 [ 8 10 12]]

[[ 0  0  0]
 [ 4  5  6]
 [ 8 10 12]]

numpy.linalg

Matrix and vector products

   
dot(a, b[, out]) Dot product of two arrays.
linalg.multi_dot(arrays, *[, out]) Compute the dot product of two or more arrays in a single function call, while automatically selecting the fastest evaluation order.
vdot(a, b, /) Return the dot product of two vectors.
inner(a, b, /) Inner product of two arrays.
outer(a, b[, out]) Compute the outer product of two vectors.
matmul(x1, x2, /[, out, casting, order, …]) Matrix product of two arrays.
tensordot(a, b[, axes]) Compute tensor dot product along specified axes.
einsum(subscripts, *operands[, out, dtype, …]) Evaluates the Einstein summation convention on the operands.
einsum_path(subscripts, *operands[, optimize]) Evaluates the lowest cost contraction order for an einsum expression by considering the creation of intermediate arrays.
linalg.matrix_power(a, n) Raise a square matrix to the (integer) power n.
kron(a, b) Kronecker product of two arrays.

Decompositions

   
linalg.cholesky(a) Cholesky decomposition.
linalg.qr(a[, mode]) Compute the qr factorization of a matrix.
linalg.svd(a[, full_matrices, compute_uv, …]) Singular Value Decomposition.

Matrix eigenvalues

   
linalg.eig(a) Compute the eigenvalues and right eigenvectors of a square array.
linalg.eigh(a[, UPLO]) Return the eigenvalues and eigenvectors of a complex Hermitian (conjugate symmetric) or a real symmetric matrix.
linalg.eigvals(a) Compute the eigenvalues of a general matrix.
linalg.eigvalsh(a[, UPLO]) Compute the eigenvalues of a complex Hermitian or real symmetric matrix.

Norms and other numbers

   
linalg.norm(x[, ord, axis, keepdims]) Matrix or vector norm.
linalg.cond(x[, p]) Compute the condition number of a matrix.
linalg.det(a) Compute the determinant of an array.
linalg.matrix_rank(A[, tol, hermitian]) Return matrix rank of array using SVD method
linalg.slogdet(a) Compute the sign and (natural) logarithm of the determinant of an array.
trace(a[, offset, axis1, axis2, dtype, out]) Return the sum along diagonals of the array.

Solving equations and inverting matrices

   
linalg.solve(a, b) Solve a linear matrix equation, or system of linear scalar equations.
linalg.tensorsolve(a, b[, axes]) Solve the tensor equation a x = b for x.
linalg.lstsq(a, b[, rcond]) Return the least-squares solution to a linear matrix equation.
linalg.inv(a) Compute the (multiplicative) inverse of a matrix.
linalg.pinv(a[, rcond, hermitian]) Compute the (Moore-Penrose) pseudo-inverse of a matrix.
linalg.tensorinv(a[, ind]) Compute the ‘inverse’ of an N-dimensional array.

The source code is Open Source and can be found on GitHub.