programing

숫자를 NaN이나 무한대로 설정할 수 있나요?

firstcheck 2022. 11. 7. 21:51
반응형

숫자를 NaN이나 무한대로 설정할 수 있나요?

배열 요소를 다음과 같이 설정할 수 있습니까?NaNPython으로요?

또한 변수를 +/- 무한대로 설정할 수 있습니까?그렇다면 숫자가 무한대인지 아닌지를 확인하는 기능이 있나요?

스트링에서 캐스트:float():

>>> float('NaN')
nan
>>> float('Inf')
inf
>>> -float('Inf')
-inf
>>> float('Inf') == float('Inf')
True
>>> float('Inf') == 1
False

네, 그거에 쓸 수 있어요.

import numpy as np
a = arange(3,dtype=float)

a[0] = np.nan
a[1] = np.inf
a[2] = -np.inf

a # is now [nan,inf,-inf]

np.isnan(a[0]) # True
np.isinf(a[1]) # True
np.isinf(a[2]) # True

숫자를 NaN이나 무한대로 설정할 수 있나요?

네, 사실 몇 가지 방법이 있어요.Import 없이 작업하는 사람도 있고 필요한 사람도 있습니다.import단, 이 답변에서는 개요의 라이브러리를 표준 라이브러리와 NumPy(표준 라이브러리는 아니지만 매우 일반적인 서드파티 라이브러리)로 제한합니다.

다음 표에서는 not-a-number 또는 양의 무한대 또는 음의 무한대를 생성하는 방법은 다음과 같습니다.float:

╒══════════╤══════════════╤════════════════════╤════════════════════╕
│   result │ NaN          │ Infinity           │ -Infinity          │
│ module   │              │                    │                    │
╞══════════╪══════════════╪════════════════════╪════════════════════╡
│ built-in │ float("nan") │ float("inf")       │ -float("inf")      │
│          │              │ float("infinity")  │ -float("infinity") │
│          │              │ float("+inf")      │ float("-inf")      │
│          │              │ float("+infinity") │ float("-infinity") │
├──────────┼──────────────┼────────────────────┼────────────────────┤
│ math     │ math.nan     │ math.inf           │ -math.inf          │
├──────────┼──────────────┼────────────────────┼────────────────────┤
│ cmath    │ cmath.nan    │ cmath.inf          │ -cmath.inf         │
├──────────┼──────────────┼────────────────────┼────────────────────┤
│ numpy    │ numpy.nan    │ numpy.PINF         │ numpy.NINF         │
│          │ numpy.NaN    │ numpy.inf          │ -numpy.inf         │
│          │ numpy.NAN    │ numpy.infty        │ -numpy.infty       │
│          │              │ numpy.Inf          │ -numpy.Inf         │
│          │              │ numpy.Infinity     │ -numpy.Infinity    │
╘══════════╧══════════════╧════════════════════╧════════════════════╛

테이블에서 몇 가지 언급:

  • float컨스트럭터는 실제로 대소문자를 구분하지 않으므로float("NaN")또는float("InFiNiTy").
  • cmath그리고.numpy상수는 플레인 Python을 반환합니다.float물건들.
  • numpy.NINF내가 알고 있는 유일한 상수인데 이 상수에는-.
  • 복잡한 NaN과 Infinity를 생성할 수 있습니다.complex그리고.cmath:

    ╒══════════╤════════════════╤═════════════════╤═════════════════════╤══════════════════════╕
    │   result │ NaN+0j         │ 0+NaNj          │ Inf+0j              │ 0+Infj               │
    │ module   │                │                 │                     │                      │
    ╞══════════╪════════════════╪═════════════════╪═════════════════════╪══════════════════════╡
    │ built-in │ complex("nan") │ complex("nanj") │ complex("inf")      │ complex("infj")      │
    │          │                │                 │ complex("infinity") │ complex("infinityj") │
    ├──────────┼────────────────┼─────────────────┼─────────────────────┼──────────────────────┤
    │ cmath    │ cmath.nan ¹    │ cmath.nanj      │ cmath.inf ¹         │ cmath.infj           │
    ╘══════════╧════════════════╧═════════════════╧═════════════════════╧══════════════════════╛
    

    '가 붙은 옵션은 플레인float, 가 아닙니다.complex.

숫자가 무한대인지 아닌지를 확인하는 기능이 있나요?

네, 있습니다. 사실 NaN, Infinity, Nan과 Inf 모두 여러 가지 기능이 있습니다.그러나 이러한 사전 정의된 함수는 기본 제공 기능이 아니며 항상import:

╒══════════╤═════════════╤════════════════╤════════════════════╕
│      for │ NaN         │ Infinity or    │ not NaN and        │
│          │             │ -Infinity      │ not Infinity and   │
│ module   │             │                │ not -Infinity      │
╞══════════╪═════════════╪════════════════╪════════════════════╡
│ math     │ math.isnan  │ math.isinf     │ math.isfinite      │
├──────────┼─────────────┼────────────────┼────────────────────┤
│ cmath    │ cmath.isnan │ cmath.isinf    │ cmath.isfinite     │
├──────────┼─────────────┼────────────────┼────────────────────┤
│ numpy    │ numpy.isnan │ numpy.isinf    │ numpy.isfinite     │
╘══════════╧═════════════╧════════════════╧════════════════════╛

다시 한 번 말씀드리겠습니다.

  • cmath그리고.numpy함수는 복잡한 객체에도 작동하며, 실제 또는 가상의 부품이 NaN 또는 Infinity인지 확인합니다.
  • numpy기능도 기능합니다.numpy어레이 및 1개로 변환할 수 있는 모든 것(리스트, 태플 등)
  • 또한 NumPy에서 양의 무한대와 음의 무한대를 명시적으로 확인하는 함수도 있습니다.numpy.isposinf그리고.numpy.isneginf.
  • 판다는 두 가지 추가 기능을 제공합니다.NaN: 및 (NaN뿐만 아니라 일치)None그리고.NaT)
  • 빌트인 기능은 없어도, 직접 작성하기 쉬울 것입니다(여기에서는 타입 체크나 문서 작성에 소홀했습니다).

    def isnan(value):
        return value != value  # NaN is not equal to anything, not even itself
    
    infinity = float("infinity")
    
    def isinf(value):
        return abs(value) == infinity 
    
    def isfinite(value):
        return not (isnan(value) or isinf(value))
    

이러한 함수에 대한 예상 결과를 요약하려면(입력값을 부동으로 가정함)

╒════════════════╤═══════╤════════════╤═════════════╤══════════════════╕
│          input │ NaN   │ Infinity   │ -Infinity   │ something else   │
│ function       │       │            │             │                  │
╞════════════════╪═══════╪════════════╪═════════════╪══════════════════╡
│ isnan          │ True  │ False      │ False       │ False            │
├────────────────┼───────┼────────────┼─────────────┼──────────────────┤
│ isinf          │ False │ True       │ True        │ False            │
├────────────────┼───────┼────────────┼─────────────┼──────────────────┤
│ isfinite       │ False │ False      │ False       │ True             │
╘════════════════╧═══════╧════════════╧═════════════╧══════════════════╛

Python에서 배열 요소를 NaN으로 설정할 수 있습니까?

목록에 NaN(또는 Infinity)을 언제든지 포함할 수 있습니다.

>>> [math.nan, math.inf, -math.inf, 1]  # python list
[nan, inf, -inf, 1]

단, 이 기능을 포함하려면array(예:array.array또는numpy.array)는, 어레이의 타입은 다음과 같습니다.float또는complex그렇지 않으면 어레이 타입으로 다운캐스트를 시도하기 때문입니다.

>>> import numpy as np
>>> float_numpy_array = np.array([0., 0., 0.], dtype=float)
>>> float_numpy_array[0] = float("nan")
>>> float_numpy_array
array([nan,  0.,  0.])

>>> import array
>>> float_array = array.array('d', [0, 0, 0])
>>> float_array[0] = float("nan")
>>> float_array
array('d', [nan, 0.0, 0.0])

>>> integer_numpy_array = np.array([0, 0, 0], dtype=int)
>>> integer_numpy_array[0] = float("nan")
ValueError: cannot convert float NaN to integer

Python 2.4를 사용하는 경우

inf = float("9e999")
nan = inf - inf

Python 2.4를 실행하고 있는 임베디드 기기에 심플제이슨을 포팅할 때 문제가 발생했습니다.float("9e999")고쳤습니다.사용하지 않다inf = 9e999문자열에서 변환해야 합니다. -inf를 주다-Infinity.

아니면 계산해서

Python 3.9 on Windows 10
>>> import sys
>>> Inf = sys.float_info.max * 10
>>> Inf
inf
>>> NaN = Inf - Inf
>>> NaN
nan

언급URL : https://stackoverflow.com/questions/5438745/is-it-possible-to-set-a-number-to-nan-or-infinity

반응형