Einfach gesagt, numpy.newaxiswird verwendet , um die Dimension zu erhöhen , indem der bestehenden Anordnung einer weiteren Dimension , wenn verwendet einmal . So,
1D- Array wird zu 2D- Array
2D- Array wird zu 3D- Array
Das 3D- Array wird zum 4D- Array
Das 4D- Array wird zum 5D- Array
und so weiter..
Hier ist eine visuelle Darstellung, die die Heraufstufung eines 1D-Arrays zu 2D-Arrays zeigt.

Szenario 1 : np.newaxisDies kann nützlich sein, wenn Sie ein 1D-Array explizit in einen Zeilenvektor oder einen Spaltenvektor konvertieren möchten , wie im obigen Bild dargestellt.
Beispiel:
# 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)
Szenario 2 : Wenn wir Numpy Broadcasting als Teil einer Operation verwenden möchten , beispielsweise während der Addition einiger Arrays.
Beispiel:
Angenommen, Sie möchten die folgenden zwei Arrays hinzufügen:
x1 = np.array([1, 2, 3, 4, 5])
x2 = np.array([5, 4, 3])
Wenn Sie versuchen, diese einfach so hinzuzufügen, wird NumPy Folgendes auslösen ValueError:
ValueError: operands could not be broadcast together with shapes (5,) (3,)
In dieser Situation können Sie np.newaxisdie Dimension eines der Arrays erhöhen, damit NumPy senden kann .
In [2]: x1_new = x1[:, np.newaxis] # x1[:, None]
# now, the shape of x1_new is (5, 1)
# array([[1],
# [2],
# [3],
# [4],
# [5]])
Fügen Sie nun hinzu:
In [3]: x1_new + x2
Out[3]:
array([[ 6, 5, 4],
[ 7, 6, 5],
[ 8, 7, 6],
[ 9, 8, 7],
[10, 9, 8]])
Alternativ können Sie dem Array auch eine neue Achse hinzufügen x2:
In [6]: x2_new = x2[:, np.newaxis] # x2[:, None]
In [7]: x2_new # shape is (3, 1)
Out[7]:
array([[5],
[4],
[3]])
Fügen Sie nun hinzu:
In [8]: x1 + x2_new
Out[8]:
array([[ 6, 7, 8, 9, 10],
[ 5, 6, 7, 8, 9],
[ 4, 5, 6, 7, 8]])
Hinweis : Beachten Sie, dass wir in beiden Fällen das gleiche Ergebnis erzielen (wobei eines die Transponierte des anderen ist).
Szenario 3 : Dies ähnelt Szenario 1. Sie können das Array jedoch np.newaxismehrmals verwenden, um es auf höhere Dimensionen zu bringen. Eine solche Operation wird manchmal für Arrays höherer Ordnung ( dh Tensoren ) benötigt.
Beispiel:
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)
Weitere Hintergrundinformationen zu np.newaxis vs np.reshape
newaxis wird auch als Pseudoindex bezeichnet, der das temporäre Hinzufügen einer Achse zu einem Multiarray ermöglicht.
np.newaxisverwendet den Slicing Bediener das Array , während neu np.reshapeformt die Anordnung zu dem gewünschten Layout (unter der Annahme , dass die Abmessungen entsprechen, und dies ist Muss für eine reshapegeschehen).
Beispiel
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)
Im obigen Beispiel haben wir eine temporäre Achse zwischen der ersten und der zweiten Achse von eingefügt B(um Rundfunk zu verwenden). Hier wird eine fehlende Achse ausgefüllt np.newaxis, damit der Sendevorgang funktioniert.
Allgemeiner Tipp : Sie können auchNoneanstelle von verwendennp.newaxis; Dies sind in der Tat die gleichen Objekte .
In [13]: np.newaxis is None
Out[13]: True
PS Siehe auch diese großartige Antwort: newaxis vs reshape, um Dimensionen hinzuzufügen
except that it changes a row vector to a column vector?Das erste Beispiel ist kein Zeilenvektor. Das ist ein Matlab-Konzept. In Python ist es nur ein eindimensionaler Vektor ohne Zeilen- oder Spaltenkonzept. Zeilen- oder Spaltenvektoren sind zweidimensional, wie im zweiten Beispiel