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.
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