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

Python NumPy scimath로 밑이 10인 로그(log10) 계산하는 방법

Python NumPy에서 밑이 10인 로그를 계산할 때 음수 값도 다루고 싶다면 scimath.log10() 메서드, 즉 np.emath.log10()을 사용하면 됩니다. 이 메서드는 입력값 x에 대한 log₁₀ 값을 반환하며, x가 스칼라라면 스칼라를, 배열이라면 배열 객체를 결과로 돌려줍니다.

numpy.log10과의 차이점

일반적인 numpy.log10()은 실수 x가 0보다 작으면 NAN을 반환합니다. 반면 np.emath.log10()(scimath 버전)은 음수 입력에 대해 복소수 형태의 결과를 계산해 줍니다.

두 함수는 그 외의 동작은 동일합니다. 즉, x = 0이면 -inf, x = inf이면 inf를 반환하고, 허수부가 0이 아닌 경우(x.imag != 0)에는 복소수 주요값(principal value)을 반환합니다.

  • 첫 번째 매개변수 x: 밑이 10인 로그를 구하고자 하는 값 또는 값들의 배열입니다.

구현 단계

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

import numpy as np

array() 메서드를 사용해 NumPy 배열을 생성합니다. 여기에는 양수와 음수가 모두 포함되어 있습니다.

arr = np.array([10**1, -10**1, -10**2, 10**2, -10**3, 10**3])

배열을 화면에 출력합니다.

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

배열의 차원(dimension)을 확인합니다.

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

배열의 데이터 타입(datatype)을 확인합니다.

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

배열의 형태(shape)를 확인합니다.

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

np.emath.log10() 메서드를 사용하여 밑이 10인 로그를 계산합니다.

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

전체 예제 코드

import numpy as np

# array() 메서드로 NumPy 배열 생성
arr = np.array([10**1, -10**1, -10**2, 10**2, -10**3, 10**3])

# 배열 출력
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)

# scimath(emath).log10()으로 밑이 10인 로그 계산
print("\nResult (log10)...\n", np.emath.log10(arr))

실행 결과

Our Array...
[ 10 -10 -100 100 -1000 1000]

Dimensions of our Array...
1

Datatype of our Array object...
int64

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

Result (log10)...
[1.+0.j 1.+1.36437635j 2.+1.36437635j 2.+0.j
3.+1.36437635j 3.+0.j ]

결과 해석

실행 결과를 보면 양수 값(10, 100, 1000)에 대해서는 각각 1, 2, 3이라는 일반적인 로그 결과가 실수부로 나타나며, 허수부는 0입니다(+0.j). 반면 음수 값(-10, -100, -1000)에 대해서는 동일한 실수부에 약 1.36437635j의 허수부가 더해진 복소수가 반환됩니다. 이는 음수의 로그가 수학적으로 복소평면에서 정의되기 때문이며, np.emath.log10()이 NAN 대신 이러한 복소수 값을 자동으로 처리해 준다는 점이 가장 큰 장점입니다.