Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python NumPy의 scimath로 로그 밑수 2 계산하기

Python NumPy에서 np.emath.log2() 메서드를 사용하면 scimath 방식으로 로그 밑수 2(log₂)를 계산할 수 있습니다. 이 메서드는 입력값 x에 대한 밑수 2 로그 값을 반환하며, x가 스칼라라면 결과도 스칼라로, 배열이라면 배열 형태로 반환됩니다. 첫 번째 매개변수인 x는 로그 밑수 2를 구하고자 하는 값(또는 값들의 배열)입니다.

일반적인 np.log2()와 달리, np.emath.log2()는 음수나 무한대 같은 특수한 입력값이 주어져도 오류를 발생시키지 않고 복소수(complex number) 형태로 결과를 반환한다는 점이 큰 장점입니다.

단계별 진행 과정

1. 필요한 라이브러리 임포트

먼저 필요한 라이브러리를 임포트합니다.

import numpy as np

2. NumPy 배열 생성

array() 메서드를 사용해 NumPy 배열을 생성합니다. 여기에는 양의 무한대, 음의 무한대, 그리고 음수 값까지 다양한 요소가 포함되어 있습니다.

arr = np.array([np.inf, -np.inf, 16, np.exp(1), -np.exp(1), -32])

3. 배열 출력하기

print("Our Array...\n",arr)

4. 배열의 차원 확인

print("\nDimensions of our Array...\n",arr.ndim)

5. 데이터 타입 확인

print("\nDatatype of our Array object...\n",arr.dtype)

6. 배열의 형태(Shape) 확인

print("\nShape of our Array object...\n",arr.shape)

7. 로그 밑수 2 계산

np.emath.log2() 메서드를 사용해 각 요소의 로그 밑수 2 값을 계산합니다.

print("\nResult (log2)...\n",np.emath.log2(arr))

전체 예제 코드

import numpy as np

# array() 메서드로 NumPy 배열 생성
arr = np.array([np.inf, -np.inf, 16, np.exp(1), -np.exp(1), -32])

# 배열 출력
print("Our Array...\n",arr)

# 차원 확인
print("\nDimensions of our Array...\n",arr.ndim)

# 데이터 타입 확인
print("\nDatatype of our Array object...\n",arr.dtype)

# 형태(Shape) 확인
print("\nShape of our Array object...\n",arr.shape)

# np.emath.log2() 메서드로 로그 밑수 2 계산
# 스칼라 입력 시 스칼라 반환, 배열 입력 시 배열 반환
print("\nResult (log2)...\n",np.emath.log2(arr))

실행 결과

Our Array...
[ inf -inf 16. 2.71828183 -2.71828183
-32. ]

Dimensions of our Array...
1

Datatype of our Array object...
float64

Shape of our Array object...
(6,)

Result (log2)...
[ inf+0.j inf+4.53236014j 4. +0.j
1.44269504+0.j 1.44269504+4.53236014j 5. +4.53236014j]

결과 해석

실행 결과를 살펴보면 흥미로운 점을 발견할 수 있습니다.

양수 입력값: 16의 경우 log₂(16) = 4, 자연상수 e(np.exp(1) ≈ 2.71828)의 경우 약 1.4427이 실수 형태(+0.j)로 정확하게 반환됩니다.

음수 입력값: 일반적인 np.log2()라면 NaN이나 오류가 발생했을 음수 값들(-e, -32)은 복소수 형태로 처리됩니다. 예를 들어 log₂(-32)는 5 + 4.53236014j로 반환되는데, 이는 음수의 로그가 복소 평면에서 정의되기 때문입니다.

무한대 입력값: 양의 무한대(inf)는 inf로, 음의 무한대(-inf)는 허수 부분을 가진 복소수 형태로 반환됩니다.

이처럼 np.emath.log2()는 수학적으로 유효하지 않은 실수 범위의 입력도 안전하게 처리해야 하는 과학적·공학적 계산에서 매우 유용한 함수입니다.