Python 에서 Inf 와 Nan 의 판단 문제 에 대한 상세 한 설명
float("inf") #
float("-inf") #
이용inf(infinite)
에 0 을 곱 하면 얻 을 수 있다not-a-number(NaN)
.만약 하나의 수가 인 피 니 트 를 초과 한다 면,그것 은 하나의NaN(not a number)
수 이다.NaN 수 에서 그의 exponent 부분 은 표현 가능 한 최대 치,즉 FF(단일 정밀도),7FF(이중 정밀도)와 7FFF(이중 정밀도 확장)입 니 다.NaN 수 와 infinite 수의 차 이 는 infinite 수의 significant 부분 은 0 값(두 정밀도 의 bit 63 위 를 1 로 확장)이다.반면 NaN 수의 significant 부분 은 0 값 이 아니다.우 리 는 먼저 다음 과 같은 코드 를 봅 시다.
>>> 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
Python 에서 부동 소수점 이 NaN 인지 아 닌 지 를 판단 해 보지 않 았 다 면 이상 의 출력 결과 에 의아해 할 것 이다.우선,플러스 마이너스 무한 과 NaN 자체 와 자신 이 is 로 조작 한 결과 모두 True 이 고 여 기 는 문제 가 없 는 것 같 습 니 다.그러나==으로 조작 하면 결 과 는 달 라 졌 고,낸 은 이때 False 가 됐다.각각 float 로 변 수 를 다시 정의 하여 is 와==을 비교 하면 결 과 는 여전히 예상 밖 이다.이런 상황 이 발생 한 원인 은 약간 복잡 하 니,여 기 는 군더더기 가 없 으 니,관심 이 있 으 면 관련 자 료 를 찾 아 볼 수 있다.inf 와 Nan 값 을 정확하게 판단 하려 면 math 모듈
math.isinf
과math.isnan
함 수 를 사용 해 야 합 니 다.
>>> 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
이렇게 하면 틀림없다.내 가 이 문 제 를 이야기 하고 있 는 이상 파 이 썬 에서 is 와==로 대상 이 플러스 마이너스 나 NaN 인지 아 닌 지 를 판단 하려 고 하지 말 라 고 충고 하 는 것 이다.너 는 순 순 히 math 모듈 을 사용 해라,그렇지 않 으 면 불 에 타 는 것 이다.물론 다른 방법 으로 판단 할 수도 있 습 니 다.다음은 NaN 으로 예 를 들 지만 헷 갈 리 지 않도록 math 모듈 을 사용 하 는 것 을 추천 합 니 다.
대상 자체 로 자신 을 판단 하 다.
>>> def isnan(num):
... return num != num
...
>>> isnan(float("nan"))
True
numpy 모듈 함수 로
>>> import numpy as np
>>>
>>> np.isnan(np.nan)
True
>>> np.isnan(float("nan"))
True
>>> np.isnan(float("inf"))
False
Numpy 의 isnan 함 수 는 전체 list 를 판단 할 수 있 습 니 다.
>>> 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)
여기np.isnan
는 불 값 배열 을 되 돌려 줍 니 다.해당 위치 가 NaN 이면 True 로 돌아 갑 니 다.그렇지 않 으 면 False 로 돌아 갑 니 다.총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 도움 이 되 기 를 바 랍 니 다.궁금 한 점 이 있 으 면 댓 글 을 남 겨 주 십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.