코딩하는 해맑은 거북이

[Numpy] comparisons, boolean&fancy index, numpy data i/o 본문

Python/Numpy | Pandas

[Numpy] comparisons, boolean&fancy index, numpy data i/o

#CJE 2022. 12. 27.
본 게시물의 내용은 'Numpy(부스트캠프 AI Tech)' 강의를 듣고 작성하였다.

 

comparisons

- All & Any : Array의 데이터 전부(and) 또는 일부(or)가 조건에 만족 여부 반환

a = np.arange(10)
a

    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

a < 4

    array([ True, True, True, True, False, False, False, False, False, False])

np.all(a > 5), np.all(a < 10)   # 모두가 조건에 만족한다면 True

    (False, True)

np.any(a > 5), np.any(a < 0)    # 하나라도 조건에 만족한다면 True

    (True, False)

 

* numpy는 배열의 크기가 동일할 때 element간 비교의 결과를 Boolean type으로 반환

test_a = np.array([1, 3, 0], float)
test_b = np.array([5, 2, 1], float)
test_a > test_b

    array([False, True, False])

test_a == test_b

    array([False, False, False])

(test_a > test_b).any()

    True

 

* np.logical_and(), np.logical_not(), np.logical_or()

a = np.array([1, 3, 0], float)
np.logical_and(a > 0, a < 3

    array([ True, False, False])

b = np.array([True, False, True], bool)
np.logical_not(b)

    array([False, True, False])

c = np.array([False, True, False], bool)
np.logical_or(b, c)

    array([ True, True, True])

 

- np.where : 조건에 따라 True, False로 설정된 값을 반환하거나 조건에 맞는 index 값 반환

np.where(a > 0, 3, 2)   # where(condition, TRUE, FALSE)

    array([3, 3, 2])

a = np.arange(10)
np.where(a > 5)   # index 값 반환

    (array([6, 7, 8, 9]),)

 

- np.isnan() : nan(not a number) 인지 판별하는 함수, 맞으면 True, 아니면 False 반환

a = np.array([1, np.NaN, np.Inf], float)
np.isnan(a)

    array([False, True, False])

 

- np.isfinite() : 유한(finite) 값인지 판별하는 함수, 맞으면 True, 아니면 False 반환

a = np.array([1, np.NaN, np.Inf], float)
np.isfinite(a)

    array([ True, False, False])

 

- argmax & argmin : array 내 최대값 또는 최소값의 index 반환

a = np.array([1, 2, 4, 5, 8, 78, 23, 3])
a.argsort()		# 오름차순 index 정렬 / 0번째 값이 가장 작은 값의 index

    array([0, 1, 7, 2, 3, 4, 6, 5])

a.argsort()[::-1]	# 내림차순 index 정렬 / 0번째 값이 가장 큰 값의 index

    array([5, 6, 4, 3, 2, 7, 1, 0])

np.argmax(a), np.argmin(a)

    (5, 0)

 

  * axis 기반의 반환

a = np.array([[1, 2, 4, 7], [9, 88, 6, 45], [9, 76, 3, 4]])
np.argmax(a, axis=1), np.argmin(a, axis=0)

    (array([3, 1, 1]), array([0, 0, 2, 2]))

 

 

boolean & fancy index

- boolean index : 특정 조건에 따른 값을 배열 형태로 추출 (Comparison operation 함수들도 모두 사용가능)

test_array = np.array([1, 4, 0, 2, 3, 8, 9, 7], float)
test_array > 3

    array([False, True, False, False, False, True, True, True])

test_array[test_array > 3]    # 조건이 True인 index의 element만 추출

    array([4., 8., 9., 7.])

condition = test_array < 3
test_array[condition]

    array([1., 0., 2.])

 

- fancy index : numpy는 array를 index value로 사용해서 값 추출, matrix 형태의 데이터도 가능

a = np.array([2, 4, 6, 8], float)
b = np.array([0, 0, 1, 3, 2, 1], int) # 반드시 integer로 선언
a[b]    # bracket index, b 배열의 값을 index로 하여 a의 값들을 추출함

    array([2., 2., 4., 8., 6., 4.])

a.take(b) # take 함수 : bracket index와 같은 효과

    array([2., 2., 4., 8., 6., 4.])

a = np.array([[1, 4], [9, 16]], float)
b = np.array([0, 0, 1, 1, 0], int)
c = np.array([0, 1, 1, 1, 1], int)
a[b, c]   # b를 row index, c를 column index로 변환하여 표시함

    array([ 1., 4., 16., 16., 4.])

 

 

numpy data i/o

- loadtxt & savetxt : text type의 데이터를 읽고, 저장하는 기능

a = np.loadtxt('파일명')  # 파일 호출
a_int = a.astype(int)   # Int type 변환
np.savetxt('int_data.csv', a_int, delimiter=",")  # int_data.csv로 저장

 

  * numpy object - npy

a = np.arange(10, dtype=int)
np.save("npy_test_object", arr=a)   # pickle 형태로 저장
a_test = np.load(file="npy_test_object.npy")
a_test

    array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

Comments