알고리즘

[파이썬] math, numpy

hminor 2024. 4. 4. 14:41
  • 알고리즘 문제를 풀던 중 
  • 배열에 있는 모든 정수 간의 곱을 구하는 문제가 있어서
  • 한 줄 코드로 해결하고 싶은 마음에 찾아보니 
  • math, numpy로 해결하는 방법이 있어서 두 가지 모두 해결해보고
  • 어떤 방법으로 푸는 것이 더 시간 효율적인지 알아 본 결과 
  • 차이점으로는 아래와 같다고 한다.
  • NumPy:
    • NumPy는 대규모 다차원 배열과 행렬을 처리하는 데 최적화되어 있습니다.
    • 벡터화된 연산을 지원하여 배열의 요소별 연산이 매우 빠르게 수행됩니다.
    • C 언어로 구현되어 있어서 매우 빠른 속도를 제공합니다.
    • NumPy는 배열의 요소를 효율적으로 다룰 수 있는 많은 함수와 메서드를 제공합니다.
  • math 모듈:
    • math 모듈은 수학적인 함수들을 제공하며, 주로 단일 숫자나 작은 리스트 등 간단한 데이터에 사용됩니다.
    • NumPy에 비해 벡터화된 연산이 없으므로, 반복문을 사용하여 요소별 연산을 해야 합니다.
    • C로 구현되어 있지 않고 파이썬 내장 모듈이기 때문에 일반적으로 NumPy보다 느릴 수 있습니다.
    • NumPy에서 제공하는 다양한 기능과 유연성은 제한적입니다.
  • 그래서 시간 효율이 더 좋은 numpy의 메서드에 대해 좀 알아보려고 한다.
  • 우선 위에서 알고 싶어 했던 배열 내 정수의 곱은 아래와 같이 해결 가능.
  • import numpy as np
    li = [1,2,3,4]
    print(np.prod(li))
  • 그리고 일반적인 range() 와 해당 배열을 2차원 배열로 원하는 행,열로 만드는 방법은 아래와 같다.
  • import numpy as np
    li = np.arange(15).reshape(3,5)
    print(li)
  • 물론 reshape의 행,열의 곱과 배열의 크기가 같아야 에러가 발생하지 않는다.
  • 그리고 행,열을 열,행 구조로 변경하고자 한다면 아래와 같이 해결할 수 있다.
    • import numpy as np
      li = np.arange(15).reshape(3,5)
      np.transpose(li)
      print(li)
    • import numpy as np
      li = np.arange(15).reshape(3,5)
      print(np.transpose(li))
  • 신기하게 위와 같이 return 값도 주어지고 배열 자체도 변경된다는 것을 알 수 있다.
  • 그리고 해당 배열에 특정 값을 곱하거나 같은 크기의 배열 간의 같은 인덱스의 합을 출력하고자 한다면 아래와 같다.
    • import numpy as np
      li1 = 2*np.array([1,2,3])
      li2 = 3*np.array([4,5,6])

      print(li1)
      print(li2)
      print(li1+li2)
  • 이렇게 다양한 메서드들이 많이 있기에 자주 사용하는 방법을 확인해보면 좋을 것 같다.

'알고리즘' 카테고리의 다른 글

[파이썬] numpy  (0) 2024.04.05
벡터 vector  (0) 2024.04.04
[파이썬] 순열,조합  (0) 2024.04.04
[프로그래머스, 파이썬] 등수 매기기  (1) 2024.03.29
[프로그래머스, 파이썬] 저주의 숫자 3  (0) 2024.03.29