220315_Numpy 배운 내용!
- Numpy module
- 다차원배열, 2차원 matrix 연산을 쉽고 빠르게 하기 위해서 사용
- ndarray
- ndarray의 특징, 속성
- ndarray의 생성방법 -> 난수 관련된 것은 외우자!
- random관련된 생성방법과 특수한 기능들(메소드들)
- indexing, slicing => 자유자재로 다룰 수 있도록 해야함!
=> boolean indexing, fancy indexing 은 꼭 기억하도록!
# ndarray의 사칙연산(일반적인 연산)
# ndarray의 shape이 같아야함
import numpy as np
# shape이 같음
arr1 = np.array([1,2,3]) # (3,)
arr2 = np.array([4,5,6]) # (3,)
print(arr1 + arr2) # [5 7 9] // 같은 위치에 있는 것 끼리 연산이 됨!
'''
# shape이 다름
arr1 = np.array([1,2,3,4]) # (4,)
arr2 = np.array([4,5,6]) # (3,)
print(arr1 + arr2) # shape이 다르니까 오류임!
'''
# shape이 다를때도 shape을 맞출 수 있으면 연산이 가능
# => broadcasting : 두 개의 ndarray의 shape을 똑같이 맞충
arr1 = np.array([1,2,3,4]) # (4,)
print(arr1 + 1) # [2 3 4 5] // 1 => [1,1,1,1] broadcasting
# 다양한 경우
'''
arr1 = np.array([1,2,3,4,5,6]) # (6,)
arr2 = np.array([4,5,6]) # (3,)
arr1 + arr2 # shape이 다르니까 오류임!
'''
arr1 = np.array([[1,2,3],[4,5,6]]) # (2,3)
arr2 = np.array([4,5,6]) # (3,) => 1차원이 2차원으로 broadcasting 되어 연산이 가능해짐
arr1 + arr2 # array([[ 5, 7, 9],
# [ 8, 10, 12]])
# 형렬곱연산(matrix 곱연산)
arr1 = np.array([[1,2,3],[4,5,6]]) # (2,3)
arr2 = np.array([[4,5], [6,7], [8,9]]) # (3,2)
# 행렬곱 연산의 결과는 (2,2)
print(np.matmul(arr1, arr2)) # [[ 40 46]
# [ 94 109]]
# 전치행렬(transpose)
arr = np.array([[1,2,3], [4,5,6]]) # (2,3)
print(arr)
print(arr.T) # (3,2)
# iterator(반복자)를 이용한 반복문 처리
# 일반적으로 for문을 이용해서 반복처리를 하는데,
# ndarray는 while문과 iterator를 이용해서 반복처리 하는 방식을 선호함
arr = np.array([1,2,3,4,5]) # (5,)
print(arr)
# for문을 이용한 반복처리
'''
for tmp in arr:
print(tmp)
'''
# 1차원 ndarray에 대해서 iterator를 이용해 반복처리
arr = np.array([1,2,3,4,5]) # (5,)
# 1. iterator 객체를 하나 얻어옴
# iterator 객체로부터 index를 추출할 수 있음
my_iter = np.nditer(arr, flags=['c_index'])
while not my_iter.finished:
idx = my_iter.index
print(arr[idx]) # 출력
my_iter.iternext()
# 2차원 ndarray에 대해서 iterator를 이용해 반복처리
arr = np.array([[1,2,3], [4,5,6]]) #(2,3)
'''
for tmp1 in range(arr.shape[0]):
for tmp2 in range(arr.shape[1]):
print(arr[tmp1, tmp2])
'''
arr = np.array([[1,2,3], [4,5,6]]) #(2,3)
my_iter = np.nditer(arr, flags=['multi_index'])
while not my_iter.finished:
idx = my_iter.multi_index
print(idx)
print(arr[idx])
my_iter.iternext()
# 다양한 집계함수와 axis개념
arr = np.arange(1,7,1).reshape(2,3) # reshape(2,3) => 2행 3열 views를 보여줌!
print(arr) # [[1 2 3]
# [4 5 6]]
# ndarray 데이터에 대한 합을 구할 수 있음
print(np.sum(arr)) # 21 => Numpy가 제공하는 함수를 이용
print(arr.sum()) # 21 => ndarray가 가지고 있는 메소드를 이용
print(arr.mean()) # 3.5
print(arr.max()) # 6
print(arr.min()) # 1
print(arr.argmax()) # 5 // 가장 큰 값이 어디있는지 인덱스 값을 알려줌
print(arr.std()) # 1.707825127659933 // 표준편차
# axis 개념(축)
# numpy는 집계함수를 이용할 때 axis를 명시하지 않으면 전체를 대상으로 연산 수행
arr = np.arange(1,7,1).reshape(2,3) # reshape(2,3) => 2행 3열 views를 보여줌!
print(arr) # [[1 2 3]
# [4 5 6]]
print(arr.sum()) # 21
print(arr.sum(axis=0)) # [5 7 9]
print(arr.sum(axis=1)) # [ 6 15]
# 간단한 연습문제
arr = np.arange(1,17,1).reshape(4,4)
print(arr)
# 이 안에 10보다 큰 수는 몇개 있나요?
# boolean indexing 이용
# 내 풀이
tmp = (arr > 10)
print(arr[tmp])
(arr[tmp]).size
# 선생님 풀이
print((arr>10).sum())
[정렬, 연결, 삭제, csv파일 로딩]
일반적으로 ndarray로 이 작업들을 하지 않습니당!
pandas로 처리합니다!