¿Cómo funciona numpy.newaxis y cuándo usarlo? {HD}

apple touch icon@2


simplemente di, numpy.newaxis solía hacerlo aumentar la dimensión la matriz existente otra dimensioncuando se usa una vez. Debido a esto,

  • 1D la matriz se 2D educación

  • 2D la matriz se 3D educación

  • 3D la matriz se 4D educación

  • 4D la matriz se 5D educación

etc..

Aquí hay una representación visual. soporte financiero de matriz 1D a matrices 2D.

Visualización de lienzo de Newaxis


escenario 1: np.newaxis puede ser útil cuando quieras expresamente Convierta una matriz 1D en una vector de línea o un columna de vectorescomo se muestra en la imagen de arriba.

Ejemplo:

# 1D array
In [7]: arr = np.arange(4)
In [8]: arr.shape
Out[8]: (4,)

# make it as row vector by inserting an axis along first dimension
In [9]: row_vec = arr[np.newaxis, :]     # arr[None, :]
In [10]: row_vec.shape
Out[10]: (1, 4)

# make it as column vector by inserting an axis along second dimension
In [11]: col_vec = arr[:, np.newaxis]     # arr[:, None]
In [12]: col_vec.shape
Out[12]: (4, 1)

Escenario-2: Si queremos usar transmisión entumecida como parte de una operación, por ejemplo al hacer aditivo algunas matrices.

Ejemplo:

Suponga que desea agregar las siguientes dos matrices:

 x1 = np.array([1, 2, 3, 4, 5])
 x2 = np.array([5, 4, 3])

Si intenta agregarlos así, NumPy genera lo siguiente ValueError :

ValueError: operands could not be broadcast together with shapes (5,) (3,)

En esta situación, puede utilizar np.newaxis para aumentar la dimensión de una de las matrices para que NumPy pueda convertir.

In [2]: x1_new = x1[:, np.newaxis]    # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
#        [2],
#        [3],
#        [4],
#        [5]])

Ahora agrega:

In [3]: x1_new + x2
Out[3]:
array([[ 6,  5,  4],
       [ 7,  6,  5],
       [ 8,  7,  6],
       [ 9,  8,  7],
       [10,  9,  8]])

Alternativamente, también puede agregar un nuevo eje a la matriz x2:

In [6]: x2_new = x2[:, np.newaxis]    # x2[:, None]
In [7]: x2_new     # shape is (3, 1)
Out[7]: 
array([[5],
       [4],
       [3]])

Ahora agrega:

In [8]: x1 + x2_new
Out[8]: 
array([[ 6,  7,  8,  9, 10],
       [ 5,  6,  7,  8,  9],
       [ 4,  5,  6,  7,  8]])

Nota: Tenga en cuenta que en ambos casos obtenemos el mismo resultado (pero uno es la transposición del otro).


Escenario-3: Esto es similar al Escenario-1. pero puedes usar np.newaxis más de una vez por apoyar financieramente la matriz a dimensiones superiores. A veces, esta operación es necesaria para matrices de orden superior (es decir, tensor).

Ejemplo:

In [124]: arr = np.arange(5*5).reshape(5,5)

In [125]: arr.shape
Out[125]: (5, 5)

# promoting 2D array to a 5D array
In [126]: arr_5D = arr[np.newaxis, ..., np.newaxis, np.newaxis]    # arr[None, ..., None, None]

In [127]: arr_5D.shape
Out[127]: (1, 5, 5, 1, 1)

Alternativamente, puede usar numpy.expand_dims que tiene una intuición axis kwarg

# adding new axes at 1st, 4th, and last dimension of the resulting array
In [131]: newaxes = (0, 3, -1)
In [132]: arr_5D = np.expand_dims(arr, axis=newaxes)
In [133]: arr_5D.shape
Out[133]: (1, 5, 5, 1, 1)

Más información sobre np.newaxis frente a np.reshape

newaxis también se conoce como pseudoíndice, que permite la adición temporal de un eje a una multimatriz.

np.newaxis utiliza el operador de corte para reconstruir la matriz mientras numpy.reshape cambia la forma de la matriz al diseño deseado (suponiendo que las dimensiones coincidan; y eso es tengo que hacia reshape suceder).

ejemplo

In [13]: A = np.ones((3,4,5,6))
In [14]: B = np.ones((4,6))
In [15]: (A + B[:, np.newaxis, :]).shape     # B[:, None, :]
Out[15]: (3, 4, 5, 6)

En el ejemplo anterior, insertamos un eje temporal entre el primer y el segundo eje de B (Usar difusión). Aquí se agrega un eje faltante np.newaxis para que la transmisión funcione.


Consejos generales: También puedes usar None En vez de np.newaxis; Estos son en realidad los mismos objetos.

In [13]: np.newaxis is None
Out[13]: True

PD También vea esta gran respuesta: newaxis vs remodelar para agregar dimensiones





¿Cómo funciona numpy.newaxis y cuándo usarlo? {HD}

Artículos recomendados

Deja una respuesta

Tu dirección de correo electrónico no será publicada.