2014-01-21 19 views
7

ich eine Reihe habenfinden, wenn eine Zahl float64

z.B.

a = 1.22373 

type(a) is float 

Wie weise ich will finden, wenn eine Zahl

float64 

oder nicht.

Wie ich mit Python oder Numpy finden werde?

Antwort

13

Verwendung isinstance:

>>> f = numpy.float64(1.4) 
>>> isinstance(f, numpy.float64) 
True 
>>> isinstance(f, float) 
True 

numpy.float64 von Python nativen Typ float vererbt wird. Das, weil es sowohl float als auch float64 ist (@Bakuriu thx, um darauf hinzuweisen). Aber wenn Sie für float64 Typ python float Instanzvariable überprüfen werden Sie False in Ergebnis:

>>> f = 1.4 
>>> isinstance(f, numpy.float64) 
False 
>>> isinstance(f, float) 
True 
+0

Beachten Sie, dass ' isinstance (f, float) 'ist' True', wenn 'f' ein' np.float64' ist, weil 'np.float64' von pythons' float' erbt. – Bakuriu

+0

Und in einer Weise, die wahr ist, solange man an der Idee festhält, dass ein 'float64' _is_ ein' float' ist. Bleib einfach bei diesem Konzept. – Alfe

1

Wenn Sie numpy Typen nur zu vergleichen sind, kann es besser sein, Ihre Vergleich der Anzahl zu stützen jedes dtype identifizieren, die ist was der zugrunde liegende C-Code tut. Auf meinem System 12 die Zahl für np.float64 ist:

>>> np.dtype(np.float64).num 
12 
>>> np.float64(5.6).dtype.num 
12 
>>> np.array([5.6]).dtype.num 
12 

es nutzen zu können, mit Nicht-numpy Werte auch, Sie könnten Ihren Weg durch sie mit so etwas wie Ente-Typ:

def isdtype(a, dt=np.float64): 
    try: 
     return a.dtype.num == np.dtype(dt).num 
    except AttributeError: 
     return False 
Verwandte Themen