파이썬(Python)/Numpy

numpy.linalg.norm

leebaro 2017. 8. 23.
728x90


numpy.linalg.norm


numpy.linalg.norm(xord=Noneaxis=Nonekeepdims=False)

이 함수는 8가지 다른 매트릭스 노름 중 1가지를 반환한다. 또는 ord 파라미터의 값에 따라 벡터 노름의 무한 값 중 한가지를 반환한다.


파라미터
x : array_like
배열을 입력한다. 만약 axis가 none이면 x는 1차원이나 2차원이다.
ord : {0이 아닌 정수값, inf, -inf, 'fro','nuc'} optional
노름의 순서(아래 note 확인) inf는 numpy의 inf 오브젝트를 의미한다
axis : {정수, 정수의 2 튜플, None}, optional
axis가 정수이면, 벡터 노름을 계산할 x의 축을 지정한다. axis가 2-튜플이면 2차원 매트릭스를 유지하는 축을 지정하고, 이 매트릭스 노름이 계산된다. axis가 None면 벡터 노름(x가 1차원인 경우) 또는 매트릭스 노름(x가 2차원인 경우) 이 반환된다.
keepdims : bool, optional
만약 이 파라미터가 참이면, 표준화된 축이 1의 크기로 남는다. 이 옵션과 함께 결과는 오리지널 x에 따라 명확하게 반환된다.
반환값
n : float or ndarray
매트릭스 또는 벡터의 Norm



노트

ord <= 0의 결과는 수학적인 norm이 아니지만 결과는 다양한 수치적 목적으로 유용할 수 있다.


아래의 노름들은 계산되어 진다.:

ordnorm for matricesnorm for vectors
NoneFrobenius norm2-norm
‘fro’Frobenius norm
‘nuc’nuclear norm
infmax(sum(abs(x), axis=1))max(abs(x))
-infmin(sum(abs(x), axis=1))min(abs(x))
0sum(x != 0)
1max(sum(abs(x), axis=0))as below
-1min(sum(abs(x), axis=0))as below
22-norm (largest sing. value)as below
-2smallest singular valueas below
othersum(abs(x)**ord)**(1./ord)

예제



>>> from numpy import linalg as LA
>>> a = np.arange(9) - 4
>>> 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]])

save image

아래 LA.norm(a)의 결과는 위의 식을 이용하여 나온 결과이다.


>>> 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)
nan
>>> LA.norm(b, -2)
1.8570331885190563e-016
>>> LA.norm(a, 3)
5.8480354764257312
>>> LA.norm(a, -3)
nan

Using the 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 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)


Reference

https://docs.scipy.org/doc/numpy/reference/generated/numpy.linalg.norm.html

728x90