Wie zu bestimmen, ob eine Zahl beliebigen Typs int (Kern-oder numpy, signiert oder nicht)?
Brauche ich, um zu testen, ob eine variable vom Typ int
oder irgendwelche np.int*
, np.uint*
am besten mit einem einzigen Zustand (d.h. keine or
).
Nach einigen tests, ich denke, dass:
isinstance(n, int)
passt nurint
undnp.int32
(odernp.int64
je nach Plattform),np.issubdtype(type(n), int)
scheint zu passen alleint
undnp.int*
, aber nicht mitnp.uint*
.
Dies führt zu zwei Fragen: wird np.issubdtype
match alle Art von signed ints? Bestimmen können, in einem einzigen prüfen, ob eine Zahl ist jede Art von signed oder unsigned int?
Dies ist zum testen für Ganzzahlen, sollten Sie den test zurück False
für float-mag.
Du musst angemeldet sein, um einen Kommentar abzugeben.
NumPy enthält Basisklassen, die Sie kann/sollte man verwenden für die Subtyp-Kontrolle, anstatt den Python-Arten.
Verwenden
np.integer
zu überprüfen, die für jede Instanz entweder signed oder unsigned Integer-zahlen.Verwenden
np.signedinteger
undnp.unsignedinteger
zu überprüfen, für signed-Typen oder unsigned-Typen.Aller schwebenden oder komplexe Typen zurück
False
wenn getestet.np.issubdtype(np.uint*, int)
immerFalse
weil die Python -int
ist ein signed-Typ.Eine nützliche Referenz zeigt die Beziehung zwischen all diesen Basis-Klassen findet sich in der Dokumentation hier.
isinstance(n, (int, np.integer))
.Schlage ich vor, vorbei an ein Tupel von Datentypen zu python
isinstance()
built-in-Funktion. Und in Bezug auf Ihre Frage übernp.issubtype()
es nicht mit jeder Art von signed ints, es zu bestimmen, ob eine Klasse eine Unterklasse einer zweiten Klasse. Und da wir alle integer-Typen (int8, int32, etc.) die Unterklassen vonint
es wird True zurückgeben, wenn Sie eine dieser Arten zusammen mitint
.Hier ist ein Beispiel:
Auch, wie ein mehr allgemeiner Ansatz (ist nicht angemessen, wenn Sie nur wollen, passen einige spezifische Arten), die Sie verwenden können
np.isreal()
:np.issutype()
. Ich denke, die Auflistung von Typen inisinstance()
funktionieren würde, aber ich möchte dies vermeiden, da es bedeuten würde, zu tunisinstance(n, (int, np.int, np.int0, np.int8, np.int16, <etc.>, np.uint, <etc.>)
. Ich kann mir nicht denken weniger pythonic.np.integer
wie vorgeschlagen von ajcr funktioniert Prima, danke!