norm(x, ord=None, axis=None, keepdims=False)
This function is able to return one of eight different matrix norms, or one of an infinite number of vector norms (described below), depending on the value of the ord
parameter.
For values of ord < 1
, the result is, strictly speaking, not a mathematical 'norm', but it may still be useful for various numerical purposes.
The following norms can be calculated:
===== ============================ ========================== ord norm for matrices norm for vectors ===== ============================ ========================== None Frobenius norm 2-norm 'fro' Frobenius norm -- 'nuc' nuclear norm -- inf max(sum(abs(x), axis=1)) max(abs(x)) -inf min(sum(abs(x), axis=1)) min(abs(x)) 0 -- sum(x != 0) 1 max(sum(abs(x), axis=0)) as below -1 min(sum(abs(x), axis=0)) as below 2 2-norm (largest sing. value) as below -2 smallest singular value as below other -- sum(abs(x)**ord)**(1./ord) ===== ============================ ==========================
The Frobenius norm is given by :
$||A||_F = [\sum_{i,j} abs(a_{i,j})^2]^{1/2}$
The nuclear norm is the sum of the singular values.
Both the Frobenius and nuclear norm orders are only defined for matrices and raise a ValueError when x.ndim != 2
.
Input array. If :None:None:`axis`
is None, x
must be 1-D or 2-D, unless :None:None:`ord`
is None. If both :None:None:`axis`
and :None:None:`ord`
are None, the 2-norm of x.ravel
will be returned.
Order of the norm (see table under Notes
). inf means numpy's :None:None:`inf`
object. The default is None.
If :None:None:`axis`
is an integer, it specifies the axis of x
along which to compute the vector norms. If :None:None:`axis`
is a 2-tuple, it specifies the axes that hold 2-D matrices, and the matrix norms of these matrices are computed. If :None:None:`axis`
is None then either a vector norm (when x
is 1-D) or a matrix norm (when x
is 2-D) is returned. The default is None.
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
.
Norm of the matrix or vector(s).
Matrix or vector norm.
scipy.linalg.norm
Similar function in SciPy.
>>> from numpy import linalg as LA
... a = np.arange(9) - 4
... a array([-4, -3, -2, ..., 2, 3, 4])
>>> b = a.reshape((3, 3))
... b array([[-4, -3, -2], [-1, 0, 1], [ 2, 3, 4]])
>>> LA.norm(a) 7.745966692414834
>>> LA.norm(b) 7.745966692414834
>>> LA.norm(b, 'fro') 7.745966692414834
>>> LA.norm(a, np.inf) 4.0
>>> LA.norm(b, np.inf) 9.0
>>> LA.norm(a, -np.inf) 0.0
>>> LA.norm(b, -np.inf) 2.0
>>> LA.norm(a, 1) 20.0
>>> LA.norm(b, 1) 7.0
>>> LA.norm(a, -1) -4.6566128774142013e-010
>>> LA.norm(b, -1) 6.0
>>> LA.norm(a, 2) 7.745966692414834
>>> LA.norm(b, 2) 7.3484692283495345
>>> LA.norm(a, -2) 0.0
>>> LA.norm(b, -2) 1.8570331885190563e-016 # may vary
>>> LA.norm(a, 3) 5.8480354764257312 # may vary
>>> LA.norm(a, -3) 0.0
Using the :None:None:`axis`
argument to compute vector norms:
>>> c = np.array([[ 1, 2, 3],
... [-1, 1, 4]])
... LA.norm(c, axis=0) array([ 1.41421356, 2.23606798, 5. ])
>>> LA.norm(c, axis=1) array([ 3.74165739, 4.24264069])
>>> LA.norm(c, ord=1, axis=1) array([ 6., 6.])
Using the :None:None:`axis`
argument to compute matrix norms:
>>> m = np.arange(8).reshape(2,2,2)
... LA.norm(m, axis=(1,2)) array([ 3.74165739, 11.22497216])
>>> LA.norm(m[0, :, :]), LA.norm(m[1, :, :]) (3.7416573867739413, 11.224972160321824)See :
The following pages refer to to this document either explicitly or contain code examples using this.
scipy.linalg._decomp_svd.svdvals
numpy.linalg.linalg._multi_svd_norm
scipy.spatial._qhull.HalfspaceIntersection
scipy.sparse.linalg._onenormest.onenormest
numpy.linalg.cond
Hover to see nodes names; edges to Self not shown, Caped at 50 nodes.
Using a canvas is more power efficient and can get hundred of nodes ; but does not allow hyperlinks; , arrows or text (beyond on hover)
SVG is more flexible but power hungry; and does not scale well to 50 + nodes.
All aboves nodes referred to, (or are referred from) current nodes; Edges from Self to other have been omitted (or all nodes would be connected to the central node "self" which is not useful). Nodes are colored by the library they belong to, and scaled with the number of references pointing them