In numpy kann man das 'newaxis'-Objekt in der Slicing-Syntax verwenden, um eine Achse der Länge eins zu erstellen, z.
import numpy as np
print np.zeros((3,5))[:,np.newaxis,:].shape
# shape will be (3,1,5)
Die Dokumentation besagt, dass man None
stattdessen auch verwenden kann newaxis
, der Effekt ist genau der gleiche.
Gibt es einen Grund, einen über den anderen zu wählen? Gibt es eine allgemeine Präferenz oder einen Styleguide? Mein Eindruck ist, dass dies newaxis
populärer ist, wahrscheinlich weil es expliziter ist. Gibt es einen Grund, warum dies None
erlaubt ist?
None
es besser ist, ist die Optimierung der Ausführungsgeschwindigkeit. Dies kann einen sehr geringen Zeitvorteil bringen. Aber normalerweise solltest du es vorziehennp.newaxis
.newaxis = object()
(oder das C-Level-Äquivalent), ist mir ein Rätsel ... die VerwendungNone
ist ziemlich fehleranfällig. Ich hatte eine Funktion mit einem Fehler (ein Barereturn
, der ein boolesches Array zurückgeben sollte) und bekam Fehler aufgrund von Formfehlanpassungen. Es hat eine Weile gedauert, bis mir klar wurde, dass die Indizierung mitNone
nicht einfach eine erhöhtIndexError
. Wenn sie einen "frischen" Sentinel-Wert verwendet hätten, hätte ich 30 Minuten vermieden, um zu versuchen, den Fehler zu