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