HOWTO · Python

Python에서 역코사인(아크코사인) 계산

Python에서 `math.acos()`와 NumPy를 사용해 역코사인(아크코사인)을 계산하는 방법을 알아보세요.

이 페이지의 내용

역코사인(아크코사인)은 주어진 값이 코사인 값일 때 그에 해당하는 주각을 구합니다. 코사인의 역함수이며 코사인의 역수(1 / cos(x))와는 다릅니다. Python에서 숫자 하나를 계산할 때는 math.acos()를, 배열을 계산할 때는 numpy.arccos()를 사용합니다. 두 함수 모두 각도를 라디안 단위로 반환합니다.

단일 값에 math.acos() 사용하기

표준 라이브러리의 math.acos() 함수에는 -1부터 1까지의 실수 하나를 전달할 수 있습니다. 예를 들어 코사인 값이 0.5이면 각도는 π/3 라디안, 즉 60도입니다.

다음 예제를 실행하세요.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import math

cosine_value = 0.5
angle_radians = math.acos(cosine_value)
print(angle_radians)
1.0471975511965979

이 예제는 각도를 라디안 단위로 출력합니다. 반환값은 약 1.0472이며, 이는 π/3입니다. 역코사인의 주값은 0부터 π 라디안까지입니다.

결과를 라디안에서 도로 변환하기

결과를 변환하려면 math.degrees()를 사용하세요. degrees()는 math 모듈의 함수이지 별도의 내장 함수가 아닙니다. 서식 지정으로 표시할 소수 자릿수를 조절할 수 있으며, 내부 부동 소수점 값은 일반적인 정밀도를 유지합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import math

cosine_value = 0.5
angle_radians = math.acos(cosine_value)
angle_degrees = math.degrees(angle_radians)
print(f"{angle_degrees:.1f} degrees")
60.0 degrees

이 예제는 각도를 소수점 첫째 자리까지 표시합니다. 서식 문자열의 .1f에서 숫자를 바꾸면 서식이 적용된 텍스트에 표시할 소수 자릿수를 조절할 수 있습니다.

배열에 numpy.arccos() 사용하기

NumPy는 타사 패키지이므로 이 예제를 사용하기 전에 환경에 설치해야 합니다. NumPy의 arccos 연산은 배열의 각 요소에 적용되므로, 입력이 이미 NumPy 데이터로 구성되어 있을 때 유용합니다.

이 섹션의 코드와 표시되는 레이블 또는 출력은 영어로 유지됩니다.

import numpy as np

cosine_values = np.array([0.5, 1.0, -1.0])
angles_radians = np.arccos(cosine_values)
print(angles_radians)
[1.04719755 0.         3.14159265]

결과에는 각 입력값에 대응하는 라디안 각도가 하나씩 들어 있습니다. 값은 차례로 π/3, 0, π에 가깝습니다. NumPy로 단일 값의 역코사인도 계산할 수 있지만, 스칼라 결과 하나만 필요하다면 math.acos()를 사용하는 편이 더 간단합니다.

입력 범위와 math.acos(), numpy.arccos() 중에서 선택하기

실수 역코사인을 계산하려면 각 입력값이 -1 이상 1 이하여야 합니다. 이 범위를 벗어난 값에는 실수 아크코사인이 없습니다. 범위를 벗어난 값을 math.acos()에 전달하면 ValueError가 발생합니다. NumPy의 일반적인 오류 설정에서는 numpy.arccos()가 해당 요소에 nan을 반환하고 런타임 경고를 표시합니다. 계산된 코사인 값은 계산의 의미에 맞는 경우에만 확인하거나 범위 안으로 조정하세요. 값을 조정하면 앞선 단계의 오류를 감출 수 있습니다. 정규화된 벡터의 내적에서 값이 나온 경우 부동 소수점 반올림으로 값이 범위를 아주 조금 벗어날 수 있습니다. 그 차이가 반올림 오차라고 확신할 때만 값을 조정하고, 그렇지 않다면 계산 과정을 살펴보세요. 배열에서는 결과를 사용하기 전에 범위를 벗어난 요소가 무엇인지 확인하세요.

스칼라 값 하나에는 math.acos()를, 배열이나 벡터화 계산에는 numpy.arccos()를 선택하세요. NumPy는 Python 표준 라이브러리에 포함되지 않습니다. 여기서 NumPy를 선택하는 주된 이유는 배열 중심 인터페이스이며, 성능은 작업량에 따라 달라지므로 모든 입력 크기에서 더 빠르다고 보장할 수는 없습니다.