developer tip

numpy없이 파이썬에서 변수 NaN 할당

copycodes 2020. 9. 3. 20:06
반응형

numpy없이 파이썬에서 변수 NaN 할당


대부분의 언어에는 NaN 값을 변수에 할당하는 데 사용할 수있는 NaN 상수가 있습니다. 파이썬은 numpy를 사용하지 않고 이것을 할 수 있습니까?


예- float('nan'). Python 3.5부터 math.nan.

>>> a = float('nan')
>>> print(a)
nan
>>> print(a + 2)
nan
>>> a == a
False
>>> import math
>>> math.isnan(a)
True
>>> # Python 3.5+
>>> math.isnan(math.nan)
True

float(...)기능은 대소 문자를 구분 - 일을 float('NAN')하거나 float('naN')또는 이와 유사한 일들이 작업도 않습니다.

NaN 인 두 항목이 서로 같은지 확인하면 항상 false가 반환됩니다. 이는 부분적으로 "숫자가 아닌"두 가지가 (엄격히 말해서) 서로 동일하다고 말할 수 없기 때문 입니다. IEEE754 NaN 값에 대해 false를 반환하는 모든 비교의 근거는 무엇입니까 ?를 참조하십시오 . 자세한 내용과 정보는.

대신 math.isnan(...)값이 NaN인지 확인해야하는 경우 사용 합니다.

또한 ==NaN 값 에 대한 작업 의 정확한 의미는 list또는 같은 컨테이너 유형 내에 NaN을 저장하려고 할 dict때 (또는 사용자 정의 컨테이너 유형을 사용할 때) 미묘한 문제를 일으킬 수 있습니다 . 자세한 내용 은 컨테이너에서 NaN 존재 확인을 참조 하세요.


Python의 decimal 모듈을 사용하여 NaN 숫자를 구성 할 수도 있습니다 .

>>> from decimal import Decimal
>>> b = Decimal('nan')
>>> print(b)
NaN
>>> print(repr(b))
Decimal('NaN')
>>>
>>> Decimal(float('nan'))
Decimal('NaN')
>>> 
>>> import math
>>> math.isnan(b)
True

math.isnan(...) Decimal 객체에서도 작동합니다.


그러나 Python의 fractions 모듈 에서는 NaN 숫자를 생성 수 없습니다 .

>>> from fractions import Fraction
>>> Fraction('nan')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\fractions.py", line 146, in __new__
    numerator)
ValueError: Invalid literal for Fraction: 'nan'
>>>
>>> Fraction(float('nan'))
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:\Python35\lib\fractions.py", line 130, in __new__
    value = Fraction.from_float(numerator)
  File "C:\Python35\lib\fractions.py", line 214, in from_float
    raise ValueError("Cannot convert %r to %s." % (f, cls.__name__))
ValueError: Cannot convert nan to Fraction.

덧붙여, 당신은 또한 할 수있다 float('Inf'), Decimal('Inf')또는 math.inf(3.5)는 무한 번호를 할당 할 수 있습니다. (또한 참조 math.isinf(...))

그러나 허용 Fraction('Inf')되거나 Fraction(float('inf'))허용되지 않으며 NaN과 마찬가지로 예외가 발생합니다.

If you want a quick and easy way to check if a number is neither NaN nor infinite, you can use math.isfinite(...) as of Python 3.2+.


If you want to do similar checks with complex numbers, the cmath module contains a similar set of functions and constants as the math module:


nan = float('nan')

And now you have the constant, nan.

You can similarly create NaN values for decimal.Decimal.:

dnan = Decimal('nan')

Use float("nan"):

>>> float("nan")
nan

You can do float('nan') to get NaN.


You can get NaN from "inf - inf", and you can get "inf" from a number greater than 2e308, so, I generally used:

>>> inf = 9e999
>>> inf
inf
>>> inf - inf
nan

A more consistent (and less opaque) way to generate inf and -inf is to again use float():

>> positive_inf = float('inf')
>> positive_inf
inf
>> negative_inf = float('-inf')
>> negative_inf
-inf

Note that the size of a float varies depending on the architecture, so it probably best to avoid using magic numbers like 9e999, even if that is likely to work.

import sys
sys.float_info
sys.float_info(max=1.7976931348623157e+308,
               max_exp=1024, max_10_exp=308,
               min=2.2250738585072014e-308, min_exp=-1021,
               min_10_exp=-307, dig=15, mant_dig=53,
               epsilon=2.220446049250313e-16, radix=2, rounds=1)

참고URL : https://stackoverflow.com/questions/19374254/assigning-a-variable-nan-in-python-without-numpy

반응형