In poche parole, numpy.newaxisviene utilizzato per aumentare la dimensione dell'array esistente di un'altra dimensione , se utilizzato una volta . Così,
L' array 1D diventerà un array 2D
L' array 2D diventerà array 3D
L' array 3D diventerà un array 4D
L' array 4D diventerà un array 5D
e così via..
Ecco un'illustrazione visiva che descrive la promozione dell'array 1D in array 2D.

Scenario 1 : np.newaxispotrebbe tornare utile quando si desidera convertire esplicitamente un array 1D in un vettore di riga o in un vettore di colonna , come illustrato nella figura sopra.
Esempio:
# 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)
Scenario 2 : quando vogliamo utilizzare la trasmissione numpy come parte di alcune operazioni, ad esempio mentre facciamo l' aggiunta di alcune matrici.
Esempio:
Supponiamo che tu voglia aggiungere i seguenti due array:
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([5, 4, 3])
Se provi ad aggiungerli in questo modo, NumPy genererà quanto segue ValueError:
ValueError: operands could not be broadcast together with shapes (5,) (3,)
In questa situazione, è possibile utilizzare np.newaxisper aumentare la dimensione di uno degli array in modo che NumPy possa trasmettere .
In [2]: x1_new = x1[:, np.newaxis] # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5]])
Ora aggiungi:
In [3]: x1_new + x2
Out[3]:
array([[ 6, 5, 4],
[ 7, 6, 5],
[ 8, 7, 6],
[ 9, 8, 7],
[10, 9, 8]])
In alternativa, puoi anche aggiungere un nuovo asse all'array x2:
In [6]: x2_new = x2[:, np.newaxis] # x2[:, None]
In [7]: x2_new # shape is (3, 1)
Out[7]:
array([[5],
[4],
[3]])
Ora aggiungi:
In [8]: x1 + x2_new
Out[8]:
array([[ 6, 7, 8, 9, 10],
[ 5, 6, 7, 8, 9],
[ 4, 5, 6, 7, 8]])
Nota : osserva che otteniamo lo stesso risultato in entrambi i casi (ma uno è il recepimento dell'altro).
Scenario 3 : è simile allo scenario 1. Tuttavia, è possibile utilizzare np.newaxispiù di una volta per promuovere l'array a dimensioni superiori. Tale operazione è talvolta necessaria per array di ordine superiore ( cioè tensori ).
Esempio:
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)
Ulteriori informazioni su np.newaxis vs np.reshape
newaxis viene anche chiamato come pseudo-indice che consente l'aggiunta temporanea di un asse in un multiarray.
np.newaxisutilizza l'operatore affettatura di ricreare la matrice mentre np.reshaperimodella la matrice al layout desiderato (supponendo che le dimensioni corrispondono, e questo è mosto per un reshapeaccada).
Esempio
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)
Nell'esempio sopra, abbiamo inserito un asse temporaneo tra il primo e il secondo asse di B(per usare la trasmissione). Un asse mancante viene compilato qui usando np.newaxisper far funzionare l' operazione di trasmissione .
Suggerimento generale : puoi anche usareNoneal posto dinp.newaxis; Questi sono in effetti gli stessi oggetti .
In [13]: np.newaxis is None
Out[13]: True
PS Vedi anche questa grande risposta: newaxis vs reshape per aggiungere dimensioni
except that it changes a row vector to a column vector?Il primo esempio non è un vettore di riga. Questo è un concetto matlab. In Python è solo un vettore monodimensionale senza concetto di riga o colonna. I vettori di riga o colonna sono bidimensionali, come il secondo esempio