HOWTO · NumPy

Vector de unidad NumPy

Hay dos métodos principales que se pueden usar para normalizar un array NumPy a un vector unitario en Python, la función numpy.linalg.norm() y el enfoque autodefinido.

En esta página

Normaliza un vector NumPy distinto de cero dividiéndolo por su norma euclídea: unit_vector = vector / np.linalg.norm(vector). Para [3.0, 4.0], el resultado es [0.6, 0.8].

Definir el vector unitario

Para convertir un array NumPy unidimensional en un vector unitario, divide cada componente por la norma euclídea del vector:

u = v / ||v||

Un vector unitario tiene magnitud uno. Dividirlo por su norma cambia su longitud y conserva su dirección. Los múltiplos escalares positivos de un vector producen la misma dirección normalizada; multiplicarlo por un escalar negativo invierte la dirección. Esto resulta útil cuando un cálculo debe depender de la dirección y no de la magnitud original.

Normalizar con numpy.linalg.norm()

La función numpy.linalg.norm() de NumPy calcula por defecto la norma euclídea de un array unidimensional. Ejecuta este ejemplo para crear un array, dividirlo por su norma e imprimir sus componentes normalizados.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

vector = np.array([3.0, 4.0])
unit_vector = vector / np.linalg.norm(vector)
print(unit_vector)
[0.6 0.8]

Para esta entrada, la norma es 5, así que cada componente se divide por 5. Usa una entrada de punto flotante si quieres obtener componentes fraccionarios. El resultado conserva la misma forma unidimensional que la entrada.

Calcular la norma manualmente

Para un vector v con componentes v[i], la norma euclídea es la raíz cuadrada de la suma de los cuadrados de sus componentes. En NumPy, el cálculo es sqrt(sum(v ** 2)); dividir el vector por ese valor produce la misma fórmula de normalización. Este método muestra cada paso matemático y puede ser útil para aprender el cálculo o adaptarlo.

El código y las etiquetas o salidas visibles de esta sección se mantienen en inglés.

import numpy as np

vector = np.array([3.0, 4.0])
norm = np.sqrt(np.sum(vector ** 2))
unit_vector = vector / norm
print(unit_vector)

La fórmula manual de este ejemplo corresponde a un vector real ordinario y unidimensional. Para arrays de valores complejos u otras definiciones de norma, utiliza la operación apropiada de NumPy en lugar de suponer que elevar al cuadrado las componentes da la magnitud deseada.

Manejar vectores cero y la forma de la entrada

Un vector cuyas componentes son todas cero tiene norma cero. Dividir por esa norma no está definido, y no se puede normalizar el vector cero para convertirlo en unitario porque carece de dirección. Elige una política explícita para esa entrada, como lanzar un ValueError en una función reutilizable o gestionarla antes de normalizar en el código que llama a la función. Devolver el vector cero original evita la división, pero no lo convierte en un vector unitario.

Los ejemplos anteriores operan sobre un vector con forma (n,). Si un array contiene varios vectores, su forma y el eje que se pasa al cálculo de la norma determinan qué se normaliza. Por ejemplo, un array bidimensional puede almacenar los vectores en filas o columnas; selecciona el eje que representa cada vector y luego divide cada fila o columna por su norma correspondiente mediante broadcasting. No normalices una matriz entera como si fuera un solo vector, salvo que esa sea la operación matemática que necesitas.

Comprobar el resultado y elegir un método

Para una entrada distinta de cero, comprueba que la norma del vector normalizado sea aproximadamente uno, teniendo en cuenta el redondeo de punto flotante. En el caso unidimensional, puedes usar np.isclose(np.linalg.norm(unit_vector), 1.0). La igualdad exacta no es adecuada para la mayoría de los cálculos de punto flotante: el redondeo puede hacer que la norma quede muy cerca de uno, pero no sea exactamente uno.

Usa numpy.linalg.norm() en el flujo habitual de trabajo con NumPy: expresa claramente la intención y permite elegir el comportamiento de la norma para otras tareas. La fórmula manual de suma de cuadrados sirve para explicar el cálculo euclídeo o cuando necesitas mostrar sus pasos. Ambos métodos requieren una norma distinta de cero; ninguno convierte el vector cero en unitario. Si trabajas con varios vectores, especifica la forma de la entrada y el eje de normalización.