Merkwürdiges Verhalten des Tupels, das ein numpy Array indexiert

8

Ich bemerkte ein verwirrendes Verhalten bei der Indizierung eines flachen numpy Arrays mit einer Liste von Tupeln (mit Python 2.7.8 und numpy 1.9.1). Meine Vermutung ist, dass dies mit der maximalen Anzahl von Array-Dimensionen zusammenhängt (was meiner Meinung nach 32 ist), aber ich konnte die Dokumentation nicht finden.

%Vor%

Wird die Liste der Tupel "abgeflacht", wenn sie 32 Elemente oder größer ist? Ist das irgendwo dokumentiert?

    
kadrlica 02.06.2015, 14:10
quelle

1 Antwort

5

Der Unterschied scheint zu sein, dass die ersten Beispiele eine fancy-Indizierung auslösen (die einfach Indizes in einer Liste aus derselben Dimension auswählt), während tuple_index[:31] stattdessen als Indizierungs-Tupel behandelt wird (was die Auswahl aus mehreren Achsen impliziert). p>

Wie Sie bereits angemerkt haben, ist die maximale Anzahl von Dimensionen für ein NumPy-Array (normalerweise) 32:

%Vor%

Laut dem folgenden Kommentar in der Zuordnung.c -Datei (die den Code enthält, um den vom Benutzer übergebenen Index zu interpretieren), wird jede Sequenz von Tupeln, die kürzer als 32 sind, zu einem Indexierungstupel abgeflacht:

%Vor%

(Ich habe noch keine Referenz in der offiziellen Dokumentation auf der SciPy-Seite gefunden.)

Dies macht a[tuple_index[:3]] äquivalent zu a[(0,), (1,), (2,)] , daher der Fehler "zu viele Indizes" (weil a nur eine Dimension hat, aber wir implizieren, es gibt drei).

Andererseits ist a[tuple_index] genau dasselbe wie a[[(0,), (1,), (2,), ..., (99,)]] , was zu dem 2D-Array führt.

    
Alex Riley 02.06.2015, 14:35
quelle

Tags und Links