[Python NumPy] 범용 함수 (universal functions) : (1-5) 단일 배열 unary ufuncs : 절대값, 제곱근, 제곱값, 정수와 소수점 분리, 부호 함수
Python 분석과 프로그래밍/Python 데이터 전처리 2017. 3. 21. 00:11이전 포스팅에서는
- 범용함수(universal function, ufuncs)의 정의 및 유형
(1) 1개의 배열에 대한 ufuncs (Unary universal functions) 중에서
- (1-1) 올림 및 내림 범용 함수 (rounding ufuncs)
- (1-2) 합(sums), 곱(products), 차분(difference), 기울기(gradient) 범용함수
- (1-3) 지수함수(exponential function), 로그함수 (logarithmic function)
- (1-4) 삼각함수(trigonometric functions)
들에 대해서 알아보았습니다.
이번 포스팅에서는 Unary ufuncs 중에서
- (1-5) 수 처리 함수, 부호 판별 범용 함수들로서
* 수 처리 함수 : 절대값(absolute value), 제곱근(square root), 제곱값(square), 정수와 소수점 값(integral and fractional parts)
* 부호(sign) 판별 함수 : 1 (positive), 0(zero), -1(negative) 값 반환
등에 대해서 알아보겠습니다.
먼저, 수 처리 관련된 Unary funcs 입니다. 절대값, 제곱근, 제곱, 정수와 소수점 값 등 기본적인 것들로서 예제를 보면 금방 이해할 수 있기 때문에 추가적인 설명은 안 달겠습니다.
(1-5-1) 배열 원소의 절대값 (absolute value) 범용 함수 : np.abs(x), np.fabs(x) |
In [1]: import numpy as np In [2]: x = np.array([-100, 1, -4, 100]) In [3]: x Out[3]: array([-100, 1, -4, 100])
# abs, fabs : element-wise absolute value for integer, floating point, complex values
In [4]: np.abs(x) Out[4]: array([100, 1, 4, 100])
In [5]: np.fabs(x) # faster abs for non-complex-valued data Out[5]: array([ 100., 1., 4., 100.])
|
(1-5-2) 배열 원소의 제곱근(Square Root) 범용 함수 : np.sqrt(y) |
In [6]: y = np.array([1, 4, 100])
# sqrt : Compute the square root of each element, equivalent to x**0.5 In [7]: np.sqrt(y) # equivalent to x**0.5 Out[7]: array([ 1., 2., 10.])
In [8]: y**0.5 Out[8]: array([ 1., 2., 10.])
|
(1-5-3) 배열 원소의 제곱값 (square value) 범용 함수 : np.square(y) |
In [9]: y Out[9]: array([ 1, 4, 100])
# square : Compute the square of each element, equivalent to x**2 In [10]: np.square(y) # equvalent to y**2 Out[10]: array([ 1, 16, 10000], dtype=int32)
In [11]: y**2 Out[11]: array([ 1, 16, 10000])
|
(1-5-4) 배열 원소의 정수와 소수점을 구분하여 2개의 배열 반환 : np.modf(z) |
np.modf() 범용함수는 1개의 배열을 input으로 받아서 특이하게도 2개의 배열을 output으로 반환합니다. 반환되는 첫번째 배열은 원래 배열의 각 원소들의 소수점 부분(fractional parts)으로 구성되어 있구요, 반환되는 두번째 배열에는 원래 배열의 각 원소들의 정수 부분(integral parts)으로 구성되어 있습니다.
만약 정수 부분으로만 구성된 두번째 배열을 선택하고 싶다면 np.modf(z)[1] 처럼 하면 됩니다.
In [12]: z = np.array([3.5, 7.8, -10.3]) In [13]: z Out[13]: array([ 3.5, 7.8, -10.3])
# modf : return fractional and integral prats of array as separate array
In [14]: np.modf(z) Out[14]: (array([ 0.5, 0.8, -0.3]), array([ 3., 7., -10.]))
# indexing 2nd array of the returned array, which are integral parts In [15]: np.modf(z)[1] Out[15]: array([ 3., 7., -10.])
In [16]: np.modf(z)[0] Out[16]: array([ 0.5, 0.8, -0.3])
|
(1-5-5) 배열 원소의 부호 판별 함수 : np.sign(x) ☞ 1 (positive), 0(zero), -1(negative) |
# sign : returns the sign of each element : 1 (positive), 0(zero), -1(negative)
In [17]: c = np.array([-2, -1, 0, 1, 2]) In [18]: c Out[18]: array([-2, -1, 0, 1, 2]) In [19]: np.sign(c) Out[19]: array([-1, -1, 0, 1, 1])
|
다음번 포스팅에서는 논리 함수 (logical unary ufuncs)에 대해서 알아보겠습니다.
많은 도움 되었기를 바랍니다.