이전 포스팅에서는
 
 - 범용함수(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) 

 - (1-5) 절대값(absolute), 제곱근(square root), 제곱값(square), 정수와 소수점 값 분리(integral and fractional parts), 부호(sign) 판별 함수

 

등에 대해서 알아보겠습니다.

 

 

이번 포스팅에서는 (1-6) 1개 배열 대상의 논리 범용 함수(Logic Unary ufuncs) 에 대해서 알아보겠습니다. 논리 함수(logic functions)는 참(True) 또는 거짓(False)의 boolean 값을 반환합니다.

 

 

 

 

 

  (1-6-1) 배열의 원소에 대한 논리 함수 (logic functions for array contents)

 

  (1-6-1-1) 배열에 NaN(Not a Number) 포함 여부 확인 함수 : np.isnan(x)

 

 

# isnan : Test element-wise for NaN(Not a Number) and return result as a boolean array

 

In [1]: import numpy as np


In [2]: a = np.array([0, 1, 2, np.nan, 4, np.inf, np.NINF, np.PINF])


In [3]: a

Out[3]: array([ 0., 1., 2., nan, 4., inf, -inf, inf])


In [4]: np.isnan(a)

Out[4]: array([False, False, False, True, False, False, False, False], dtype=bool)

 

 

 

 

  (1-6-1-2) 배열에 유한수(finite number) 포함 여부 확인 함수 : np.isfinite(x)

 

 

# isfinite : Test element-wise for finiteness (not infinity or not Not a Number)

 

In [5]: a

Out[5]: array([ 0., 1., 2., nan, 4., inf, -inf, inf])


In [6]: np.isfinite(a)

Out[6]: array([ True, True, True, False, True, False, False, False], dtype=bool)

 

 

 

 

 (1-6-1-3) 배열에 무한수(infinite number) 포함 여부 확인 함수 : np.isinf(x)

 

 

# isinf : Test element-wise for positive or negative infinity

 

In [7]: a

Out[7]: array([ 0., 1., 2., nan, 4., inf, -inf, inf])

 

In [8]: np.isinf(a)

Out[8]: array([False, False, False, False, False, True, True, True], dtype=bool)

 

 

 

 

  (1-6-1-4) 배열에 음의 무한수 포함 여부 : np.isneginf(x)

 

 

# isneginf : Test element-wise for negative infinity, return result as bool array

 

In [9]: a

Out[9]: array([ 0., 1., 2., nan, 4., inf, -inf, inf])

 

In [10]: np.isneginf(a)

Out[10]: array([False, False, False, False, False, False, True, False], dtype=bool)

 

 

 

 

  (1-6-1-5) 배열에 양의 무한수 포함 여부 확인 함수 : np.isposinf(x)

 

 

# isposinf : Test element-wise for positive infinity, return result as bool arry

 

In [11]: a

Out[11]: array([ 0., 1., 2., nan, 4., inf, -inf, inf])

 

In [12]: np.isposinf(a)

Out[12]: array([False, False, False, False, False, True, False, True], dtype=bool)

 

 

 

 

  (1-6-2) 참 확인 논리 함수 (Logic functions for truth value testing)

 

  (1-6-2-1) 배열의 모든 원소가 참(True) 인지 평가하는 함수 : np.all()

 

축(no axis, axis=0, axis=1) 에 따라서 어떻게 참(True) 여부를 평가하는지 유심히 보시기 바랍니다.

 

 

# np.all() : Test whether all array elements along a given axis evaluate to True

 

In [13]: np.all([[True,False],[True,True]])

Out[13]: False


In [14]: np.all([[True,False],[True,True]], axis=0)

Out[14]: array([ True, False], dtype=bool)

 

In [15]: np.all([[True,False],[True,True]], axis=1)

Out[15]: array([False, True], dtype=bool)

 

 

 

 

  (1-6-2-2) 배열의 1개 이상의 원소가 참(True) 인지 평가하는 함수 : np.any()

 

 

# np.any() : Test whether any array elements along a given axis evaluate to True

 

In [16]: np.any([[True,False],[True,True]])

Out[16]: True


In [17]: np.any([[True,False],[True,True]], axis=0)

Out[17]: array([ True, True], dtype=bool)


In [18]: np.any([[True,False],[True,True]], axis=1)

Out[18]: array([ True, True], dtype=bool)

 


 

In [21]: np.any([[False,False],[True,True]], axis=0)

Out[21]: array([ True, True], dtype=bool)

 

In [22]: np.any([[False,False],[True,True]], axis=1)

Out[22]: array([False, True], dtype=bool)

 

 

 

 

  (1-6-3) 단일 배열 원소에 대한 논리 연산(Logical operations)을 위한 논리 함수

 

  (1-6-3-1) 배열 원소가 조건을 만족하지 않는 경우 참 반환 : np.logical_not(condition)

 

 

# logical_not : Compute the truth value of NOT x element-wise, equivalent to -x

 

In [23]: b = np.array([0, 1, 2, 3, 4])


In [24]: np.logical_not( b <= 2 )

Out[24]: array([False, False, False, True, True], dtype=bool)

 

 

 

2개 배열 간 함수인 Binary Universal Unfctions(Ufuncs) 소개는 http://rfriend.tistory.com/286 를 참고하시기 바랍니다.

 

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

 

 

 

Posted by R Friend R_Friend

이전 포스팅에서는
 
 - 범용함수(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

이번 포스팅부터는 몇 번에 나누어서 로그함수, 삼각함수, 사칙연산 함수 등과 같이 일반적으로 많이 사용되는 범용 함수 (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) 함수에 대해서 알아보도록 하겠습니다.

 

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

 

 

Posted by R Friend R_Friend