[Python NumPy] 범용 함수 (universal functions) : (1-1) 단일 배열 unary ufuncs : 올림 혹은 내림 (rounding)
Python 분석과 프로그래밍/Python 데이터 전처리 2017. 3. 5. 21:18이번 포스팅부터는 몇 번에 나누어서 로그함수, 삼각함수, 사칙연산 함수 등과 같이 일반적으로 많이 사용되는 범용 함수 (universal functions)들에 대해서 소개하겠습니다.
Python에서 범용 함수를 지원하는 모듈이 여러개 있습니다.
Pytho 배울 때 초반에 배우는 math module은 실수(real number)에 대해서만 범용함수를 지원하며, cmath module 은 복소수(complex number) 까지 범용함수를 지원합니다. numpy module은 실수, 복소수, 복소수 행렬 (complex matrix)의 원소 간 범용 함수를 모두 지원하므로 사용 범위가 가장 넓어 매우 유용합니다. 배열의 원소간 연산을 위해 NumPy의 Ufunc 함수는 쓸모가 많습니다. NumPy는 맥가이버 칼 같다고나 할까요.
[ Python modules for Universal Functions ]
NumPy 범용 함수는 몇 개의 배열에 대해 적용이 되는지에 따라서
- (1) 1개의 배열에 적용하는 Unary Universal Functions (ufuncs)
- (2) 2개의 배열에 대해 적용하는 Binary Universal Functions (ufuncs)
으로 구분할 수 있습니다.
범용함수 종류가 너무 많아서 포스팅에 한꺼번에 소개하기가 버거우므로, 서너번에 나누어서 Unary Universal Functions를 먼저 소개하고, 다음으로 Binary Ufuncs 순서로 알아보겠습니다.
(1-1) 올림 혹은 내림 범용 함수 (round universal functions) |
비슷비슷한 함수들이 여러개 있는데요, 말로 설명하는 것보다 예를 자세히 살펴보고 비교해보는 것이 이해하기에 쉽고 빠를 것 같습니다.
# import module and making an array In [1]: import numpy as np In [2]: a = np.array([-4.62, -2.19, 0, 1.57, 3.40, 4.06]) In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
|
(1-1-1) np.around(a) : 0.5를 기준으로 올림 혹은 내림 |
# np.around(a) : Evenly round to the given number of decimals
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [4]: np.around(a) Out[4]: array([-5., -2., 0., 2., 3., 4.])
|
(1-1-2) np.round_(a, N) : N 소수점 자릿수까지 반올림 |
# np.round_(a, n) : Round an array to the given number of decimals
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [5]: np.round_(a, 1) Out[5]: array([-4.6, -2.2, 0. , 1.6, 3.4, 4.1])
|
(1-1-3) np.rint(a) : 가장 가까운 정수로 올림 혹은 내림 |
# round elements to the nearest integer
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [6]: np.rint(a) Out[6]: array([-5., -2., 0., 2., 3., 4.])
|
(1-1-4) np.fix(a) : '0' 방향으로 가장 가까운 정수로 올림 혹은 내림 |
# Round to nearest integer towards zero
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [7]: np.fix(a) Out[7]: array([-4., -2., 0., 1., 3., 4.])
|
(1-1-5) np.ceil(a) : 각 원소 값보다 크거나 같은 가장 작은 정수 값 (천장 값)으로 올림 |
# the smallest integer greater than or equal to each element
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [8]: np.ceil(a) Out[8]: array([-4., -2., 0., 2., 4., 5.])
|
(1-1-6) np.floor(a) : 각 원소 값보다 작거나 같은 가장 큰 정수 값 (바닥 값)으로 내림 |
# the largest integer less than or equal to each element
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [9]: np.floor(a) Out[9]: array([-5., -3., 0., 1., 3., 4.])
|
(1-1-7) np.trunc(a) : 각 원소의 소수점 부분은 잘라버리고 정수값만 남김 |
# Return the truncated value of the input, element-wise
In [3]: a Out[3]: array([-4.62, -2.19, 0. , 1.57, 3.4 , 4.06])
In [10]: np.trunc(a) Out[10]: array([-4., -2., 0., 1., 3., 4.])
|
다음번 포스팅에서는 단일 배열 범용 함수의 두번째 순서로 합(sums), 곱(products), 차분(difference), 미분(gradient) 함수에 대해서 알아보도록 하겠습니다.
많은 도움 되었기를 바랍니다.