Encontrando a norma de uma matriz usando Numpy

Encontrando a norma de uma matriz usando Numpy

Neste post, descrevo encontrar a norma de uma matriz Numpy. A norma de uma matriz é uma função que mapeia a matriz para um número real não negativo. Para encontrar a norma de uma matriz Numpy, usamos o Numpy's Numpy.Linalg.método de norma. O método pega uma matriz ou um objeto semelhante a uma matriz (Ex: Python listas) como entrada e retorna um flutuador ou uma matriz de valores de norma.

Vamos ver um exemplo.

$ python3
Python 3.8.5 (padrão, 8 de março de 2021, 13:02:45)
[GCC 9.3.0] no Linux2
Digite "ajuda", "direitos autorais", "créditos" ou "licença" para obter mais informações.
>>> importar numpy como np
>>> a = np.Linspace (-4, 4, 9)
>>> a
Array ([-4., -3., -2., -1., 0., 1., 2., 3., 4.]))
>>> np.Linalg.norma (a)
7.745966692414834

A norma padrão calculada por Numpy é a norma L2, que também é conhecida como norma euclidiana. A ordem da norma pode ser especificada usando o parâmetro ORD fornecido a Numpy.Linalg.norma. Continuando de cima,

>>> np.Linalg.norma (a, ord = 1)
20.0

A declaração acima calculada norma 1. A norma 1 é simplesmente a soma dos valores absolutos da matriz. Em geral, a norma de um vetor para qualquer ordem ORD é calculada como:

(∑i | x | ord) 1/ord

Onde a soma é realizada sobre o valor absoluto de cada elemento da matriz. Pode -se calcular a norma do infinito ignorando o NP.INF como ordem. Norm Infinity é o valor absoluto máximo de todos os elementos na matriz.

>>> np.Linalg.norma (a, ord = np.inf)
4.0

Suponha que tenhamos uma matriz para a qual a norma deve ser calculada.

>>> a = np.Linspace (-4, 4, 9).remodelar (3, 3)
>>> a
Array ([[-4., -3., -2.],
[-1., 0., 1.],
[2., 3., 4.]])
>>> np.Linalg.norma (a)
7.745966692414834

O exposto acima retorna a norma euclidiana calculada em toda a matriz. Mas há cenários em que seremos obrigados a calcular normas em um eixo específico. Numpy também permite o uso de um eixo de parâmetro para especificar um eixo ao longo da qual a norma pode ser calculada para matrizes. Usando o eixo de parâmetro, pode -se passar o eixo através do qual a norma deve ser calculada. Eixo 0 é a primeira dimensão. Continuando a partir do exemplo anterior, se especificarmos o eixo = 0, a norma será calculada através das linhas e o eixo especificando = 1 calcula a norma nas colunas.

>>> a
Array ([[-4., -3., -2.],
[-1., 0., 1.],
[2., 3., 4.]])
>>> np.Linalg.norma (a, eixo = 0)
Array ([4.58257569, 4.24264069, 4.58257569])
>>> np.Linalg.norma (a, eixo = 1)
Array ([5.38516481, 1.41421356, 5.38516481])

Se for uma matriz multidimensional, uma tupla de números inteiros que especifica o eixo através do qual a norma deve ser calculada pode ser passada para o parâmetro do eixo.

>>> a = np.Linspace (1, 8, 8).remodelar (2, 2, 2)
>>> a
Array ([[1., 2.],
[3., 4.]],
[[5., 6.],
[7., 8.]]])
>>> np.Linalg.norma (a, eixo = (1, 2))
Array ([5.47722558, 13.19090596])
>>> A [0 ,: ,:]
Array ([[1., 2.],
[3., 4.]])
>>> np.Linalg.norma (a [0 ,: ,:])
5.477225575051661
>>> a [1 ,: ,:]
Array ([[5., 6.],
[7., 8.]])
>>> np.Linalg.norma (a [1 ,:,:])
13.19090595827292

No exemplo acima, quando especificamos o eixo = (1,2) a norma é calculada no eixo 1 e 2 para cada subarray no eixo 0.