숫자를 NaN이나 무한대로 설정할 수 있나요?
배열 요소를 다음과 같이 설정할 수 있습니까?NaN
Python으로요?
또한 변수를 +/- 무한대로 설정할 수 있습니까?그렇다면 숫자가 무한대인지 아닌지를 확인하는 기능이 있나요?
스트링에서 캐스트: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
'programing' 카테고리의 다른 글
input() error - NameError: 이름 '...'이 정의되지 않았습니다. (0) | 2022.11.07 |
---|---|
Cent에서 MariaDB 또는 MySQL을 완전히 삭제합니다.OS 7 또는 RHEL 7 (0) | 2022.11.07 |
tsv 파일을 Panda DataFrame에 로드하려면 어떻게 해야 합니까? (0) | 2022.11.07 |
vuex 저장소에서 구성 요소를 업데이트하지 않음 (0) | 2022.11.07 |
PHP - 문자열에서 숫자가 아닌 모든 문자 제거 (0) | 2022.11.07 |