scipy.linalg.

norm#

scipy.linalg.norm(a, ord=None, ось=None, keepdims=False, check_finite=True)[источник]#

Норма матрицы или вектора.

Эта функция может возвращать одну из восьми различных матричных норм, или одну из бесконечного числа векторных норм (описанных ниже), в зависимости от значения ord параметр. Для тензоров с рангом, отличным от 1 или 2, только ord=None поддерживается.

Параметры:
aarray_like

Входной массив. Если ось равно None, a должен быть одномерным или двумерным, если только ord равно None. Если оба ось и ord равны None, 2-норма a.ravel будет возвращен.

ord{int, inf, -inf, 'fro', 'nuc', None}, опционально

Порядок нормы (см. таблицу под Notes). inf означает NumPy inf объект.

ось{int, 2-кортеж ints, None}, необязательный

Если ось является целым числом, оно задаёт ось a вдоль которой вычислять векторные нормы. Если ось является кортежем из 2 элементов, он задаёт оси, содержащие 2-D матрицы, и вычисляются матричные нормы этих матриц. Если ось равно None, то либо векторная норма (когда a является 1-D) или матричной нормой (когда a возвращается 2-D.

keepdimsbool, необязательно

Если установлено в True, оси, по которым производится нормирование, остаются в результате как измерения размером один. С этой опцией результат будет корректно транслироваться относительно исходного a.

check_finitebool, необязательно

Проверять ли, что входная матрица содержит только конечные числа. Отключение может повысить производительность, но может привести к проблемам (сбоям, незавершению) если входные данные содержат бесконечности или NaN.

Возвращает:
nfloat или ndarray

Норма матрицы или вектора(ов).

Примечания

Для значений ord <= 0, результат, строго говоря, не является математической 'нормой', но он всё ещё может быть полезен для различных численных целей.

Могут быть вычислены следующие нормы:

ord

норма для матриц

норма для векторов

None

Норма Фробениуса

2-норма

‘fro’

Норма Фробениуса

‘nuc’

ядерная норма

inf

max(sum(abs(a), axis=1))

max(abs(a))

-inf

min(sum(abs(a), axis=1))

min(abs(a))

0

sum(a != 0)

1

max(sum(abs(a), axis=0))

как показано ниже

-1

min(sum(abs(a), axis=0))

как показано ниже

2

2-норма (наибольшее сингулярное значение)

как показано ниже

-2

наименьшее сингулярное значение

как показано ниже

other

sum(abs(a)**ord)**(1./ord)

Норма Фробениуса задается формулой [1]:

\(||A||_F = [\sum_{i,j} abs(a_{i,j})^2]^{1/2}\)

Ядерная норма - это сумма сингулярных значений.

Нормы Фробениуса и ядерная норма определены только для матриц.

Ссылки

[1]

G. H. Golub и C. F. Van Loan, Матричные вычисления, Балтимор, Мэриленд, Издательство Университета Джонса Хопкинса, 1985, стр. 15

Примеры

>>> import numpy as np
>>> 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.0
>>> norm(b, np.inf)
9.0
>>> norm(a, -np.inf)
0.0
>>> norm(b, -np.inf)
2.0
>>> norm(a, 1)
20.0
>>> norm(b, 1)
7.0
>>> norm(a, -1)
-4.6566128774142013e-010
>>> norm(b, -1)
6.0
>>> norm(a, 2)
7.745966692414834
>>> norm(b, 2)
7.3484692283495345
>>> norm(a, -2)
0.0
>>> norm(b, -2)
1.8570331885190563e-016
>>> norm(a, 3)
5.8480354764257312
>>> norm(a, -3)
0.0