Submit
Path:
~
/
/
proc
/
thread-self
/
root
/
proc
/
self
/
root
/
opt
/
alt
/
python35
/
lib64
/
python3.5
/
site-packages
/
scipy
/
linalg
/
File Content:
misc.py
from __future__ import division, print_function, absolute_import import numpy as np from numpy.linalg import LinAlgError from .blas import get_blas_funcs from .lapack import get_lapack_funcs __all__ = ['LinAlgError', 'norm'] def norm(a, ord=None, axis=None, keepdims=False): """ Matrix or vector norm. This function is able to return one of seven different matrix norms, or one of an infinite number of vector norms (described below), depending on the value of the ``ord`` parameter. Parameters ---------- a : (M,) or (M, N) array_like Input array. If `axis` is None, `a` must be 1-D or 2-D. ord : {non-zero int, inf, -inf, 'fro'}, optional Order of the norm (see table under ``Notes``). inf means numpy's `inf` object axis : {int, 2-tuple of ints, None}, optional If `axis` is an integer, it specifies the axis of `a` 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 then either a vector norm (when `a` is 1-D) or a matrix norm (when `a` is 2-D) 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 `a`. Returns ------- n : float or ndarray Norm of the matrix or vector(s). Notes ----- For values of ``ord <= 0``, 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 -- 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 [1]_: :math:`||A||_F = [\\sum_{i,j} abs(a_{i,j})^2]^{1/2}` The ``axis`` and ``keepdims`` arguments are passed directly to ``numpy.linalg.norm`` and are only usable if they are supported by the version of numpy in use. References ---------- .. [1] G. H. Golub and C. F. Van Loan, *Matrix Computations*, Baltimore, MD, Johns Hopkins University Press, 1985, pg. 15 Examples -------- >>> from scipy.linalg import norm >>> a = np.arange(9) - 4.0 >>> a array([-4., -3., -2., -1., 0., 1., 2., 3., 4.]) >>> b = a.reshape((3, 3)) >>> b array([[-4., -3., -2.], [-1., 0., 1.], [ 2., 3., 4.]]) >>> norm(a) 7.745966692414834 >>> norm(b) 7.745966692414834 >>> norm(b, 'fro') 7.745966692414834 >>> norm(a, np.inf) 4 >>> norm(b, np.inf) 9 >>> norm(a, -np.inf) 0 >>> norm(b, -np.inf) 2 >>> norm(a, 1) 20 >>> norm(b, 1) 7 >>> norm(a, -1) -4.6566128774142013e-010 >>> norm(b, -1) 6 >>> norm(a, 2) 7.745966692414834 >>> norm(b, 2) 7.3484692283495345 >>> norm(a, -2) 0 >>> norm(b, -2) 1.8570331885190563e-016 >>> norm(a, 3) 5.8480354764257312 >>> norm(a, -3) 0 """ # Differs from numpy only in non-finite handling and the use of blas. a = np.asarray_chkfinite(a) # Only use optimized norms if axis and keepdims are not specified. if a.dtype.char in 'fdFD' and axis is None and not keepdims: if ord in (None, 2) and (a.ndim == 1): # use blas for fast and stable euclidean norm nrm2 = get_blas_funcs('nrm2', dtype=a.dtype) return nrm2(a) if a.ndim == 2 and axis is None and not keepdims: # Use lapack for a couple fast matrix norms. # For some reason the *lange frobenius norm is slow. lange_args = None # Make sure this works if the user uses the axis keywords # to apply the norm to the transpose. if ord == 1: if np.isfortran(a): lange_args = '1', a elif np.isfortran(a.T): lange_args = 'i', a.T elif ord == np.inf: if np.isfortran(a): lange_args = 'i', a elif np.isfortran(a.T): lange_args = '1', a.T if lange_args: lange = get_lapack_funcs('lange', dtype=a.dtype) return lange(*lange_args) # Filter out the axis and keepdims arguments if they aren't used so they # are never inadvertently passed to a version of numpy that doesn't # support them. if axis is not None: if keepdims: return np.linalg.norm(a, ord=ord, axis=axis, keepdims=keepdims) return np.linalg.norm(a, ord=ord, axis=axis) return np.linalg.norm(a, ord=ord) def _datacopied(arr, original): """ Strict check for `arr` not sharing any data with `original`, under the assumption that arr = asarray(original) """ if arr is original: return False if not isinstance(original, np.ndarray) and hasattr(original, '__array__'): return False return arr.base is None
Submit
FILE
FOLDER
Name
Size
Permission
Action
__pycache__
---
0755
tests
---
0755
__init__.py
6351 bytes
0644
_calc_lwork.cpython-35m-x86_64-linux-gnu.so
56296 bytes
0755
_cblas.cpython-35m-x86_64-linux-gnu.so
41224 bytes
0755
_clapack.cpython-35m-x86_64-linux-gnu.so
68984 bytes
0755
_cython_signature_generator.py
8369 bytes
0644
_cython_wrapper_generators.py
23463 bytes
0644
_decomp_polar.py
3623 bytes
0644
_decomp_qz.py
12986 bytes
0644
_decomp_update.cpython-35m-x86_64-linux-gnu.so
307856 bytes
0755
_expm_frechet.py
12182 bytes
0644
_fblas.cpython-35m-x86_64-linux-gnu.so
388576 bytes
0755
_flapack.cpython-35m-x86_64-linux-gnu.so
934896 bytes
0755
_flinalg.cpython-35m-x86_64-linux-gnu.so
70744 bytes
0755
_interpolative.cpython-35m-x86_64-linux-gnu.so
584544 bytes
0755
_interpolative_backend.py
44935 bytes
0644
_matfuncs_inv_ssq.py
28050 bytes
0644
_matfuncs_sqrtm.py
5867 bytes
0644
_procrustes.py
2375 bytes
0644
_solve_toeplitz.cpython-35m-x86_64-linux-gnu.so
183728 bytes
0755
_solvers.py
10185 bytes
0644
_testutils.py
1814 bytes
0644
basic.py
39332 bytes
0644
blas.py
6855 bytes
0644
calc_lwork.py
666 bytes
0644
cython_blas.cpython-35m-x86_64-linux-gnu.so
204424 bytes
0755
cython_blas.pxd
14416 bytes
0644
cython_lapack.cpython-35m-x86_64-linux-gnu.so
574600 bytes
0755
cython_lapack.pxd
169411 bytes
0644
decomp.py
31223 bytes
0644
decomp_cholesky.py
9601 bytes
0644
decomp_lu.py
5796 bytes
0644
decomp_qr.py
12675 bytes
0644
decomp_schur.py
8375 bytes
0644
decomp_svd.py
7226 bytes
0644
flinalg.py
1727 bytes
0644
interpolative.py
31146 bytes
0644
lapack.py
8103 bytes
0644
linalg_version.py
159 bytes
0644
matfuncs.py
19939 bytes
0644
misc.py
5881 bytes
0644
setup.py
5888 bytes
0644
special_matrices.py
29225 bytes
0644
N4ST4R_ID | Naxtarrr