Ausführliche Erklärung zum Urteil von Inf und Nan in Python

高洛峰
Freigeben: 2017-02-10 10:02:46
Original
2243 Leute haben es durchsucht

Dieser Artikel stellt hauptsächlich das Problem der Beurteilung von Inf und Nan in Python vor. Der Artikel stellt es ausführlich vor und hat einen gewissen Referenzwert für alle Freunde, die es brauchen.

Jeder weiß, dass man in Python positive und negative Unendlichkeiten auf folgende Weise ausdrücken kann:

float("inf") # 正无穷
float("-inf") # 负无穷
Nach dem Login kopieren

Verwenden Sie inf(infinite), um zu multiplizieren um 0. Holen Sie sich not-a-number(NaN). Wenn eine Zahl größer als unendlich ist, handelt es sich um eine NaN(not a number)-Zahl. In einer NaN-Zahl ist ihr Exponententeil der maximal ausdrückbare Wert, der FF (einfache Genauigkeit), 7FF (doppelte Genauigkeit) und 7FFF (erweiterte doppelte Genauigkeit) ist. Der Unterschied zwischen NaN-Zahlen und unendlichen Zahlen besteht darin, dass der Signifikantenteil der unendlichen Zahl 0 ist (Bit63 mit erweiterter doppelter Genauigkeit ist 1, während der Signifikantenteil der NaN-Zahl nicht 0 ist).

Sehen wir uns zunächst den folgenden Code an:

>>> inf = float("inf")
>>> ninf = float("-inf")
>>> nan = float("nan")
>>> inf is inf
True
>>> ninf is ninf
True
>>> nan is nan
True
>>> inf == inf
True
>>> ninf == ninf
True
>>> nan == nan
False
>>> inf is float("inf")
False
>>> ninf is float("-inf")
False
>>> nan is float("nan")
False
>>> inf == float("inf")
True
>>> ninf == float("-inf")
True
>>> nan == float("nan")
False
Nach dem Login kopieren

Wenn Sie noch nicht versucht haben, in Python zu urteilen Unabhängig davon, ob eine Gleitkommazahl NaN ist, werden Sie vom obigen Ausgabeergebnis auf jeden Fall überrascht sein. Erstens: Wenn Sie is verwenden, um mit positiver und negativer Unendlichkeit und NaN selbst zu operieren, scheint es hier kein Problem zu geben, aber wenn Sie == verwenden, um zu operieren, ist das Ergebnis anders und NaN wird False . Wenn Sie eine Variable mit float neu definieren und sie mit is und == vergleichen, ist das Ergebnis immer noch unerwartet. Die Gründe für diese Situation sind etwas kompliziert, daher werde ich hier nicht näher darauf eingehen. Wenn Sie interessiert sind, können Sie die relevanten Informationen überprüfen.

Wenn Sie Inf- und Nan-Werte korrekt ermitteln möchten, dann sollten Sie die Funktionen math.isinf und math.isnan des Mathematikmoduls verwenden:

>>> import math
>>> math.isinf(inf)
True
>>> math.isinf(ninf)
True
>>> math.isnan(nan)
True
>>> math.isinf(float("inf"))
True
>>> math.isinf(float("-inf"))
True
>>> math.isnan(float("nan"))
True
Nach dem Login kopieren

Das wird korrekt sein. Während ich gerade beim Thema bin, hier noch ein Ratschlag: Versuchen Sie nicht, is und == zu verwenden, um zu bestimmen, ob ein Objekt in Python unendlich oder NaN ist. Benutzen Sie das Mathematikmodul einfach gehorsam, sonst geraten Sie in Schwierigkeiten.

Natürlich gibt es auch andere Möglichkeiten, Urteile zu fällen. Im Folgenden wird NaN als Beispiel verwendet. Es wird jedoch dennoch empfohlen, das Mathematikmodul zu verwenden, um Verwirrung zu vermeiden.

Verwenden Sie das Objekt selbst, um sich selbst zu beurteilen

>>> def isnan(num):
...  return num != num
... 
>>> isnan(float("nan"))
True
Nach dem Login kopieren

Verwenden Sie die Funktionen von das Numpy-Modul

>>> import numpy as np
>>> 
>>> np.isnan(np.nan)
True
>>> np.isnan(float("nan"))
True
>>> np.isnan(float("inf"))
False
Nach dem Login kopieren

Numpys Isnan-Funktion kann auch die gesamte Liste beurteilen:

>>> lst = [1, float("nan"), 2, 3, np.nan, float("-inf"), 4, np.nan]
>>> lst
[1, nan, 2, 3, nan, -inf, 4, nan]
>>> np.isnan(lst)
array([False, True, False, False, True, False, False, True], dtype=bool)
Nach dem Login kopieren

Das np.isnan hier gibt ein Array boolescher Werte zurück. Wenn die entsprechende Position NaN ist, wird True zurückgegeben, andernfalls wird False zurückgegeben.

Ausführlichere Erläuterungen zum Urteil von Inf und Nan in Python finden Sie auf der chinesischen PHP-Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!