Метод numpy.linalg.norm() используется для расчета одной из восьми различных матричных норм или одной из векторных норм.
Содержание
Синтаксис
|
1 |
numpy.linalg.norm(arr, ord=None, axis=None, keepdims=False) |
Параметры
Функция np.linalg.norm() принимает в основном четыре параметра:
- arr: входной n-мерный массив.
- ord: означает, что мы хотим получить значение нормы. Нормативное значение зависит от этого параметра. Может быть восемь типов:
| Order | Норма для матрицы | Норма для вектора |
| None | Норма Фробениуса | Две нормы |
| nuc | nuclear норма | – |
| inf | max(sum(abs(x), axis=1) | max(abs(x)) |
| -inf | min(sum(abs(x), axis=1)) | min(abs(x)) |
| fro | Норма Фробениуса | – |
| 0 | – | sum(x != 0) |
| 1 | max(sum(abs(x), axis=0)) | как показано ниже |
| -1 | min(sum(abs(x), axis=0)) | как показано ниже |
| 2 | 2-norm (наибольшая знак. величина) | как показано ниже |
| -2 | наименьшее единственное значение | как показано ниже |
| другой | – | sum(abs(x)**ord)**(1./ord) |
- axis: если ось является целым числом, значение вектора вычисляется для оси x. Если ось 2-х кратная, то вычисляется матричное значение указанной матрицы. Если ось не существует, возвращается векторный критерий(когда x равен 1-D) или матричный критерий(когда x равен 2D).
- Keepdims: если для аргумента Keepdims установлено значение True, нормированные оси остаются в результате как размеры с размером один. С опцией keepdims результат будет транслироваться правильно по сравнению с исходным x.
Возвращаемое значение
Функция linalg.norm() возвращает норму данной матрицы или вектора.
Пример 1: как использовать метод np.linalg.norm()
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
import numpy as np # Creating an array arr1 = np.arange(12)-2 arr2 = arr1.reshape(3, 4) # Printing the array print("First array is: \n", arr1) print("\nSecond array is:\n ", arr2) # Calculating norm value with different order value print(np.linalg.norm(arr1), "\n") print(np.linalg.norm(arr2), "\n") print(np.linalg.norm(arr1, np.inf), "\n") print(np.linalg.norm(arr2, np.inf), "\n") print(np.linalg.norm(arr1, -np.inf), "\n") print(np.linalg.norm(arr1, -np.inf), "\n") print(np.linalg.norm(arr1, 1), "\n") print(np.linalg.norm(arr2, 1), "\n") print(np.linalg.norm(arr1, -1), "\n") print(np.linalg.norm(arr1, -1)) |
Выход
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
First array is: [-2 -1 0 1 2 3 4 5 6 7 8 9] Second array is: [[-2 -1 0 1] [ 2 3 4 5] [ 6 7 8 9]] 17.029386365926403 17.029386365926403 9.0 30.0 0.0 0.0 48.0 15.0 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8 /site-packages/numpy/linalg/linalg.py:2514: RuntimeWarning: divide by zero encountered in reciprocal absx **= ord 0.0 0.0 |
Пример 2: вычисление нормы L1 вектора
|
1 2 3 4 5 6 |
import numpy as np v = np.array([-3, 4, -5]) l1_norm = np.linalg.norm(v, ord=1) print(l1_norm) |
Выход
|
1 2 |
12.0 |
Пример 3: вычисление нормы Фробениуса для матрицы
|
1 2 3 4 5 |
import numpy as np A = np.array([[1, 2], [3, 4], [5, 6]]) frobenius_norm = np.linalg.norm(A, ord='fro') print(frobenius_norm) |
Выход
|
1 |
9.539392014169456 |
