2016-07-05 3 views
4

Wie für a = np.arange(24).reshape(2,3,4)Colon, ohne, slice (None) in numpy Array Indexer

a[0,:,1] oder a[0,slice(None),1] Ausgänge array([1, 5, 9])

während a[0,None,1] gibt array([[4, 5, 6, 7]])

Könnte sb letztere erklären?

+0

@GWW nein, tut es nicht! – Meitham

+0

Meine Version '2.7.12 | Anaconda 2.3.0 (64-Bit)'. Ich habe erneut 'a [0, None, 1]' bestätigt. Und zu den Leuten, die abwerten, könntest du ein paar Kommentare geben? – Lee

+0

Was hast du erwartet? – BrenBarn

Antwort

6

Mit einem rohen None (nicht in slice) ist das gleiche wie mit np.newaxis, von denen es aber ein Alias ​​ist.

In Ihrem Fall:

  • a[0,None,1] ist wie ein [0,np.newaxis,1], daher der Ausgang
  • während slice(None) ist wie "Scheibe nichts", weshalb a[0,:,1] die gleiche wie a[0,slice(None),1] ist. Siehe numpy Indexing doc.
+0

'np.newaxis' ist wörtlich sinnvoll und ich vernachlässige es ist gleichbedeutend mit' None' ... – Lee

+0

Ja. Zu BrenBarns Kommentar zu Moses 'Antwort: Das überraschende Ergebnis ergibt sich aus der Kombination von Slicing und 'None'. - 'a [0,1, keine] = a [0,1,:] [Keine] = Array ([[4, 5, 6, 7]])' - 'a [0, None, 1] = a [0, keine] [: 1] = Array ([[[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]]]) [:, 1] = array ([[4, 5, 6, 7]])) – Tttt1228

+0

Es tut mir leid, dass ich Moses 'Antwort nicht direkt kommentieren konnte. Ich habe nicht genug Reputation, um zu kommentieren. – Tttt1228

2

a[0,None,1] ist die gleiche wie a[0, 1] aber mit einer zusätzlichen Achse im Ergebnis.

newaxis Das Objekt kann in allen Slicing-Operationen verwendet werden, um eine eine Achse von Länge zu erstellen. :const: newaxis ist ein Alias ​​für ‘None’, und kann stattdessen mit dem gleichen Ergebnis verwendet werden.

So ist a[0,None,1] die gleiche wie a[0,np.newaxis,1]

In diesem Fall, wo None platziert wird, ist nicht von Bedeutung, aber jeder None fügt eine neue Achse.

>>> a[0,None, 1] 
array([[4, 5, 6, 7]]) 
>>> a[None,None,0,1] 
array([[[4, 5, 6, 7]]]) 
>>> a[0,np.newaxis,1] 
array([[4, 5, 6, 7]]) 
+0

Verstanden. Und 'None' ist wirklich kein gutes Keyword für Google ... – Lee

+0

Manchmal müssen Sie direkt zu den Dokumenten gehen :)) –

+0

Es ist überraschend, dass die Position von None nicht relevant ist, da die Dokumente sagen: "Die hinzugefügte Dimension ist die Position des newaxis-Objekts im Auswahltupel". – BrenBarn