Numpy: BUG: Timedelta und Float Promotion funktionieren manchmal

Erstellt am 10. Juni 2020  ·  4Kommentare  ·  Quelle: numpy/numpy

Die folgenden Beispiele führen nicht zu symmetrischen Ergebnissen:

np.promote_types("float32", "m8")
# returns "m8", which is probably wrong
np.promote_types("m8", "float32")
# raises TypeError.

Gleiches gilt für alle anderen Gleitkommatypen. Ich frage mich, ob dies eine seltsame Logik hat, als Hack, um bestimmte Ufunc-Aufrufe zuzulassen, aber ich habe noch keinen gefunden.

00 - Bug numpy.dtype

Alle 4 Kommentare

Es sieht so aus, als ob mindestens np.multiply dies unterstützt.

import numpy as np
print(np.multiply(np.timedelta64(1), 1.2))

Ich denke, das oben Genannte sollte auch als Fehler angesehen werden.

Ich denke, die Frage ist immer, dass für ufuncs "Casting-Regeln durch die Frage implementiert werden, wann ein Datentyp" sicher "in einen anderen Datentyp umgewandelt werden kann", wie in der Dokumentation beschrieben. Es sieht so aus, als ob es Ausnahmen wie oben gibt, bei denen das Casting nicht sicher ist, aber wir haben dafür gesorgt, dass das Ufunc funktioniert. Ich denke in diesem Fall sollten die Funktion "beförderungstypen "immer noch eine ungültige Typwerbung anzeigen (sowohl für np.promote_types (" float32 "," m8 ") als auch für np.promote_types (" m8 "," float32 ")). Ob wir ufunc weiterhin arbeiten lassen müssen, kann von Fall zu Fall entschieden werden?

Ja, wir müssen klar unterscheiden, dass np.promote_types eine generische Regel sein muss, die immer vernünftig ist. Deshalb mag ich den Begriff "Common Dtype". Dies ist zB der Typ, der mit np.concatenate .

Jeder Ufunc kann einzeln entscheiden, eine bestimmte Operation unter Verwendung eines "gemeinsamen D-Typs" oder einer anderen Logik zu implementieren. Wir machen das speziell für Multiple und Timedelta64, also ist das in der Tat ein separates Problem.

Ich nehme an, wir verwenden diese Logik an vielen Stellen nicht wirklich, da Ufuncs, wie Sie bemerken, hauptsächlich auf np.can_cast(..., ...) angewiesen sind. Und obwohl dies normalerweise mit der Typwerbung in Einklang steht, ist dies hier nicht der Fall.

In Anbetracht der obigen Diskussion habe ich den Fix fürpromotion_types hinzugefügt.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen