ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Python] math 표준 라이브러리 정리: 기본 수학 함수, 상수, 활용 예시
    업무 자동화/Python 2025. 11. 26. 21:19

    1. math 모듈은 무엇인가?

    1-1. 표준 라이브러리(Standard Library)

    • math파이썬 설치 시 기본으로 포함되는 표준 라이브러리 모듈입니다.
    • 별도의 pip install 없이 바로 import 해서 사용할 수 있습니다.
    import math
    
    print(math.sqrt(9))  # 3.0

    1-2. Windows / Linux 설치 차이?

    • math 모듈은 C로 구현된 내부 확장 모듈로, 파이썬 인터프리터와 함께 배포됩니다.
    • 따라서
      • Windows, Linux, macOS 모두 설치 방법이 따로 존재하지 않음
      • “파이썬만 설치되어 있다면 math는 이미 있다” 정도로 이해하면 충분합니다.
    • 정리하면, OS에 따른 설치 차이는 없다 → OS 공통 사용법만 알면 됨.

     

    2. 기본 사용법 & 네이밍

    import math
    
    # 모듈 전체 import 후 math.접두사 사용
    value = math.sqrt(16)
    
    # 일부 함수만 가져올 수도 있음 (추천은 X, 이름 충돌 주의)
    from math import sqrt, pi
    
    print(sqrt(16), pi)

    추천 패턴

    • 실무·협업 코드에서는 import math 형태를 쓰고
    • 사용 시 math.sqrt, math.pi 처럼 접두사로 모듈을 명시하는 것이 가독성에 좋습니다.

     

    3. 반올림·버림·올림·절댓값 등 기본함수

    3-1. 올림/내림/버림

    import math
    
    print(math.ceil(3.2))   # 4  : 올림
    print(math.floor(3.8))  # 3  : 내림
    print(math.trunc(3.8))  # 3  : 소수점 절단(0쪽으로 절단)
    print(math.trunc(-3.8)) # -3
    • ceil: 항상 위쪽 정수로 올림
    • floor: 항상 아래쪽 정수로 내림
    • trunc: 0을 향해 잘라버림 (음수에서 동작이 다름)

    3-2. 절댓값과 부호 관련

    import math
    
    print(math.fabs(-3.5))  # 3.5 (float 반환)
    print(abs(-3.5))        # 3.5 (내장 함수, 타입 유지)
    • math.fabs는 항상 float를 반환합니다.
    • 일반적인 절댓값 처리에는 내장 함수 abs()로 충분한 경우가 많습니다.

    3-3. 제곱근, 거듭제곱

    import math
    
    print(math.sqrt(9))      # 3.0  제곱근
    print(math.pow(2, 3))    # 8.0  (float 반환)
    print(2 ** 3)            # 8    (연산자, 정수 유지)
    • math.pow는 항상 float를 반환합니다.
    • 단순 정수 제곱에는 ** 연산자를 주로 사용합니다.

    3-4. 팩토리얼

    import math
    
    print(math.factorial(5))  # 120
    • 0! = 1도 잘 처리됩니다.
    • 조합/순열 계산 등에서 직접 구현 대신 사용하면 안전합니다.

     

    4. 로그 / 지수 함수

    4-1. 자연로그, 밑이 다른 로그

    import math
    
    x = 8
    
    print(math.log(x))        # ln(x), 자연로그
    print(math.log(x, 2))     # log_2(x)
    print(math.log10(x))      # 밑 10 로그
    print(math.log2(x))       # 밑 2 로그
    • math.log(x)는 기본적으로 자연로그(밑 e) 입니다.
    • 두 번째 인수로 밑을 직접 지정할 수 있습니다: math.log(x, base)

    4-2. 지수(exponential)

    import math
    
    print(math.exp(1))   # e^1
    print(math.exp(2))   # e^2
    • 확률 분포, 통계, 머신러닝 수식에서 자주 등장합니다.

     

    5. 삼각함수 / 각도 변환

    5-1. 라디안(radian) 기준

    삼각함수는 모두 라디안 단위를 사용합니다.

    import math
    
    # 각도(degree)를 라디안으로
    rad = math.radians(30)
    print(rad)           # 약 0.523598...
    
    print(math.sin(rad)) # 0.5 근처
    print(math.cos(rad)) # 약 0.866...
    
    # 라디안을 각도로
    deg = math.degrees(math.pi / 2)
    print(deg)           # 90.0

    5-2. 주요 삼각함수

    import math
    
    x = math.pi / 4  # 45도
    
    print(math.sin(x))
    print(math.cos(x))
    print(math.tan(x))
    
    # 역삼각함수
    print(math.asin(1))      # pi/2
    print(math.acos(0))      # pi/2
    print(math.atan(1))      # pi/4
    • 좌표 회전, 물리/기구 해석, 그래픽스 등에서 자주 사용됩니다.

     

    6. 부동소수점 도우미 함수들

    실수 연산에서 발생하는 오차 문제를 다루는 함수들입니다.

    6-1. isfinite, isinf, isnan

    import math
    
    x = 1.0
    y = math.inf
    z = math.nan
    
    print(math.isfinite(x))  # True
    print(math.isfinite(y))  # False
    print(math.isinf(y))     # True
    print(math.isnan(z))     # True
    • 계산 과정에서 inf, nan이 섞였는지 확인할 수 있습니다.

    6-2. isclose – 두 실수가 거의 같은지 비교

    import math
    
    a = 0.1 + 0.2
    b = 0.3
    
    print(a == b)                 # False (부동소수점 오차)
    print(math.isclose(a, b))     # True  (허용 오차 내에서 비교)
    • 소수 연산 결과를 비교할 땐 직접 == 비교보다 isclose 를 사용하는 것이 안전합니다.

    6-3. fsum – 정확도가 더 높은 합

    import math
    
    data = [1e16, 1, -1e16]
    
    print(sum(data))        # 0.0 (정보 소실)
    print(math.fsum(data))  # 1.0 (오차 보정된 합)
    • 매우 큰 수/작은 수가 섞인 리스트를 더할 때 math.fsum이 더 정확합니다.

     

    7. 조합 / 순열 함수 (comb, perm)

    Python 3.8+ 에서 추가된 기능입니다.

    import math
    
    # nCk: 조합 (순서 X)
    print(math.comb(5, 2))  # 10
    
    # nPk: 순열 (순서 O)
    print(math.perm(5, 2))  # 20
    • 코딩테스트, 확률/통계 계산 시 편리합니다.
    • 내부적으로 큰 정수도 정확하게 처리합니다.

     

    8. 주요 상수

    import math
    
    print(math.pi)   # 원주율 π
    print(math.e)    # 자연로그 밑 e
    print(math.tau)  # 2π
    print(math.inf)  # 무한대
    print(math.nan)  # Not a Number
    • pi, e, tau는 수식 구현에 자연스럽게 사용됩니다.
    • inf, nan은 의도적으로 “무한대” / “계산 불능” 상태를 표현할 때 사용할 수 있습니다.

    예시:

    import math
    
    # 아주 큰 값으로 초기화할 때
    best = math.inf
    
    # 비교하면서 최소값 갱신
    for x in [3, 5, 1, 9]:
        if x < best:
            best = x
    
    print(best)  # 1

     

    9. 실무·문제풀이 예시

    9-1. 각도 기반 좌표 회전

    2D 평면에서 점 (x, y)를 기준점(0, 0)에서 각도 θ만큼 회전시키는 예시입니다.

    import math
    
    def rotate_point(x, y, degree):
        rad = math.radians(degree)
        cos_t = math.cos(rad)
        sin_t = math.sin(rad)
        new_x = x * cos_t - y * sin_t
        new_y = x * sin_t + y * cos_t
        return new_x, new_y
    
    print(rotate_point(1, 0, 90))   # (거의 0, 1)
    • 기구/그래픽스/게임 등에서 그대로 응용할 수 있는 패턴입니다.

    9-2. 로그 스케일 변환 (dB 계산 느낌)

    import math
    
    def power_to_db(power):
        '''전력 값을 dB 스케일로 변환 (기본 예시).'''
        if power <= 0:
            return -math.inf
        return 10 * math.log10(power)
    
    print(power_to_db(1))    # 0 dB
    print(power_to_db(10))   # 10 dB 근처
    • 신호 처리, 통신, 센서 데이터 등을 로그 스케일로 다룰 때 활용 가능.

    9-3. 조합 개수로 경우의 수 계산

    import math
    
    n = 10  # 전체 항목 수
    k = 3   # 고르는 수
    
    cases = math.comb(n, k)
    print(f"{n}개 중 {k}개를 고르는 경우의 수: {cases}")
    • 단순한 경우의 수 계산을 직접 구현하지 않고 읽기 쉬운 코드로 표현할 수 있습니다.
Designed by Tistory.