HOWTO · NumPy
Añadir un eje a un array de NumPy con numpy.newaxis
El numpy.newaxis se puede usar para agregar una nueva dimensión a un array NumPy en Python.
En esta página
numpy.newaxis añade un eje de longitud uno a un array cuando se usa en una expresión de indexado. Colócalo antes del eje existente para formar una fila, o después para formar una columna. En un array unidimensional con forma (4,), estas opciones producen (1, 4) y (4, 1), respectivamente. Los valores originales conservan el mismo orden; el indexado cambia la forma del array al insertar un eje.
Añadir un eje a un array de NumPy con numpy.newaxis
En el indexado de NumPy, numpy.newaxis es un alias del objeto None de Python. No es un método que se invoque con paréntesis. La documentación de numpy.newaxis describe esta constante de indexado. En un índice, array[np.newaxis, :] coloca el eje nuevo al principio, mientras que array[:, np.newaxis] lo coloca después del eje original. Los dos puntos conservan todos los valores de ese eje original.
Ejecuta este ejemplo con NumPy instalado:
import numpy as np
values = np.array([1, 2, 3, 4])
print(values.shape)
row = values[np.newaxis, :]
column = values[:, np.newaxis]
print(row.shape)
print(column.shape)
(4,)
(1, 4)
(4, 1)
La primera forma indica un eje con cuatro elementos. En la forma de fila, el eje nuevo, que queda primero, tiene longitud uno y el eje original sigue teniendo longitud cuatro. En la forma de columna, primero aparece el eje original de cuatro elementos y después el eje nuevo, de longitud uno. Por eso las formas son (1, 4) y (4, 1): los elementos de la forma siguen el orden de los ejes y no representan un conjunto distinto de valores. Una forma bidimensional no convierte por sí sola los datos en un tipo especial de matriz; NumPy sigue representándolos como un array.
Puedes escribir estos mismos dos índices con None: values[None, :] crea la forma de fila y values[:, None] crea la forma de columna. Elige la escritura que aporte más claridad al código que la rodea. numpy.newaxis también puede añadir un eje a arrays que ya tienen varias dimensiones. Su posición en el índice determina dónde aparece el nuevo eje de longitud uno en la forma resultante. Antes de depender de una operación posterior, compara las posiciones del índice con la forma.
Añadir un eje resulta útil cuando otra operación necesita que las dimensiones coincidan, incluidas algunas operaciones de difusión (broadcasting). El eje añadido tiene longitud uno, por lo que la difusión puede ampliarlo cuando las demás dimensiones son compatibles; añadirlo no hace que cualquier par de arrays sea compatible automáticamente. Para elegir entre una fila y una columna, fíjate primero en la forma resultante y en el orden de ejes que necesita la siguiente operación. Así, el paso de indexado es más fácil de razonar y se evita suponer que ambas formas son intercambiables.
Para un array con forma (2, 3), matrix[:, :, None] añade un eje al final y produce la forma (2, 3, 1), mientras que matrix[None, :, :] lo añade al principio y produce (1, 2, 3). En ambos casos, los dos ejes originales conservan su orden y sus longitudes. Si usas varias posiciones de índice, anota la forma original y marca dónde aparece cada None o numpy.newaxis; así podrás prever la nueva forma antes de pasar el array a otra función.