SciPy
SciPy('사이파이'라고 읽음)는 과학기술계산을 위한 Python 라이브러리이다. NumPy, Matplotlib, pandas, SymPy와 연계되어 있다(특히 NumPy와). 가능한 알고리즘과 관련 부패키지는 다음과 같다.
- Clustering package (scipy.cluster)
- Constants (scipy.constants)
- Discrete Fourier transforms (scipy.fftpack)
- Integration and ODEs (scipy.integrate)
- Interpolation (scipy.interpolate)
- Input and output (scipy.io)
- Linear algebra (scipy.linalg)
- Miscellaneous routines (scipy.misc)
- Multi-dimensional image processing (scipy.ndimage)
- Orthogonal distance regression (scipy.odr)
- Optimization and root finding (scipy.optimize)
- Signal processing (scipy.signal)
- Sparse matrices (scipy.sparse)
- Sparse linear algebra (scipy.sparse.linalg)
- Compressed Sparse Graph Routines (scipy.sparse.csgraph)
- Spatial algorithms and data structures (scipy.spatial)
- Special functions (scipy.special)
- Statistical functions (scipy.stats)
- Statistical functions for masked arrays (scipy.stats.mstats)
- Low-level callback functions
설치
Anaconda 사용자는 별도의 인스톨없이 바로 사용할 수 있다.
NumPy와의 관계와 설정 확인
SciPy는 NumPy 상위에서 구동되는 라이브러리 정도로 이해해도 무방하다. SciPy는 기본적으로 NumPy의 ndarray를 기본 자료형으로 사용한다. 일부 패키지는 중복되지만(예, 선형대수 - numpy.linalg vs. scipy.linalg, 이산푸리에변환 - numpy.fft vs. scipy.fftpack) SciPy가 보다 풍부한 기능을 제공한다.
NumPy, SciPy 등은 수치계산을 위한 패키지이므로 성능이 중요하다. 특히 BLAS와 LAPACK 등 기본 수치라이브러리로 어떤 것을 사용했는가가 중요하다. 최근 Intel MKL을 도입하였다. numpy.show_config()와 scipy.show_config()를 통해 확인할 수 있다.
>>> import numpy
>>> numpy.show_config()
mkl_info:
libraries = ['mkl_rt']
library_dirs = ['C:/ProgramData/Anaconda3\\Library\\lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', ...]
blas_mkl_info:
<위와 동일>
blas_opt_info:
<위와 동일>
lapack_mkl_info:
<위와 동일>
lapack_opt_info:
<위와 동일>
>>> import scipy
>>> scipy.show_config()
openblas_lapack_info:
NOT AVAILABLE
lapack_mkl_info:
libraries = ['mkl_rt']
library_dirs = ['C:/ProgramData/Anaconda3\\Library\\lib']
define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
include_dirs = ['C:\\Program Files (x86)\\IntelSWTools\\compilers_and_libraries_2016.4.246\\windows\\mkl', ...]
lapack_opt_info:
<위와 동일>
blas_mkl_info:
<위와 동일>
blas_opt_info:
<위와 동일>
>>>
Timing
과학기술계산 연산은 계산 속도가 중요한 척도이다. 어떤 작업이 수행된 시간을 측정하는 것은 CPU time과 wall time으로 보통 구분한다.
- CPU time : 작업을 수행한 프로세서의 시간을 합산한 시간. time.process_time()에서 리턴된 값의 차이로 계산
- wall time : 작업을 수행한 시간. time.perf_counter()이나 time.time()에서 리턴되는 값의 차이. time_perf_counter()가 보다 정확한 값을 제시
예를 들어 A라는 작업을 2개 프로세서(코어)에서 동시에 쉬지지않고 작업했는데 2초가 걸렸다면, CPU time은 4초, wall time은 2초이다. 작업을 수행하는 개별 프로세서는 중간에 쉴때가 존재하므로 단순히 (wall time) * (프로세서 수) 로 CPU time이 계산되지는 않는다.
import numpy as np
import scipy.linalg import linalg
A = np.random.random(size=(10000,10000))
cpuTime = time.process_time() # CPU time
wallTime1 = time.perf_counter() # wall time
wallTime2 = time.time() # wall time
linalg.norm(A)
cpuTime = time.process_time()-cpuTime # CPU time
wallTime1 = time.perf_counter()-wallTime1 # wall time
wallTime2 = time.time()-wallTime2 # wall time
print('cpuTime : ', cpuTime)
print('wallTime1 : ',wallTime1)
print('wallTime2 : ',wallTime2)
주요 참고 사이트
'데이터과학' 카테고리의 다른 글
파이썬의 시각화 라이브러리 -시본(Seaborn) (0) | 2021.06.08 |
---|---|
파이썬의 시각화 라이브러리 - 맷플롯립(Matplotlib) (0) | 2021.06.08 |
파이썬의 컴퓨팅 라이브러리 - 넘파이(NumPy) (1) | 2021.06.08 |
파이썬에서 데이터 가져오기 및 내보내기 (0) | 2021.06.08 |