Warum ist numpy.dtype ('float64') speziell?

8

Kann jemand die Logik hinter der Ausgabe des folgenden Skripts erklären?

%Vor%

Danke:)

    
Troels Blum 22.03.2014, 07:59
quelle

2 Antworten

3

Wenn Sie ein beliebiges Objekt mit genau None in Python vergleichen wollen, müssen Sie folgendes verwenden:

%Vor%

Wie in diesem Fall kann jedes Objekt seinen Vergleichsoperator überschreiben, um nicht das zu tun, was Sie erwarten.

Warum ist dtype ('float64') gleichbedeutend mit None im Kontext von dtypes, wie dtypes gleich typestrings

sind? %Vor%

Gleichheit ist keine Identität.

Warum dtype(None) == dtype('float64') , viele Funktionen in numpy haben dtype=None Schlüsselwortargumente. In den meisten Fällen bedeutet dies default dtype, das ist dtype(None) . Ein Beispiel ist np.zeros . Aber es gibt Ausnahmen, z.B. wenn der dtype aus den Argumenten abgeleitet werden kann, wie im Fall von np.arange(10) , wo der Standard dtype vom Integer-Typ ist ( np.intp denke ich).

    
jtaylor 22.03.2014, 10:46
quelle
7

Sieht wie ein unglücklicher Zufall aus: Jemand entschied, dass dtype(None) "default" wäre, um zu floaten (obwohl dtype() ein Fehler ist). Dann schrieb jemand anderes dtype.__eq__ so, dass es sein zweites Argument vor dem Vergleich in einen dtype konvertiert. Also dtype(float) == None ist dtype(float) == dtype(None) , was wahr ist.

Sie können einen Kommentar im Quellcode hier sehen: descriptor.c # L1217

  
  • Erhalte typenum von einem Objekt - None geht zu NPY_DEFAULT_TYPE
  •   

Und natürlich ist NPY_DEFAULT_TYPE float (zumindest normalerweise).

Wie für den Operator __eq__ ist es hier: descriptor.c # L3317 . Es macht das, was ich skizziert habe:

%Vor%

Das ist also eine Umwandlung von was auch immer auf der rechten Seite von == zu einem dtype Objekt ist, über die vorher erwähnte Konverterfunktion, die None in dtype(float) umwandelt.

Bearbeiten: Ich fand das ziemlich interessant und es scheint wie ein Unfall, also habe ich einen Patch erstellt und den Betreuern übergeben: Ссылка .

    
John Zwinck 22.03.2014 08:25
quelle

Tags und Links