'정수와 소수점 구분하여 2개의 배열 반환하는 함수'에 해당되는 글 1건

  1. 2017.03.21 [Python NumPy] 범용 함수 (universal functions) : (1-5) 단일 배열 unary ufuncs : 절대값, 제곱근, 제곱값, 정수와 소수점 분리, 부호 함수

이전 포스팅에서는
 
 - 범용함수(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
# 1st array : fractional parts, 2nd array : integral parts

 

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)에 대해서 알아보겠습니다.

 

많은 도움 되었기를 바랍니다.

 

Posted by R Friend R_Friend