cool hamsters never sleep
넘파이 (220913 Update) 본문
GitHub - 2022shushu/BigData2022
Contribute to 2022shushu/BigData2022 development by creating an account on GitHub.
github.com
01 개요
import numpy as np
넘파이 모듈 임포트 (as np를 추가해 약어로 모듈 표현해주는 것이 관례)
array1 = np.array([1, 2, 3])
print(array1.shape) # (3, )
array2 = np.array([[1, 2, 3], [2, 3, 4]])
print(array2.shape) # (2, 3)
array3 = np.array([[1, 2, 3]])
print(array3.shape) # (1, 3)
np.array()
np.shape : 튜플 형태 차원 표현
np.ndim : 차원 표현
02 ndarray의 데이터 타입
데이터값은 숫자 값, 문자열 값, 불 값 등이 모두 가능
그 연산의 특성상 같은 데이터 타입만 가능
np.dtype : 데이터 타입 확인
np.astype() : 데이터 타입 변경 (데이터 타입이 float이라면 int형으로 바꿔서 메모리 절약)
03 ndarray 편리하게 생성하기
squence_array = np.arange(10)
print(sequence_array)
print(sequence_array.dtype, sequence_array.shape)
반복문에서 range와 범위가 같음
arrange(10)의 경우, 0부터 시작하여 9에서 종료
zero_array = np.zeros((3, 2), dtype = 'int32')
print(zero_array)
print(zero_array.dtype, zero_array.shape)
one_array = np.ones((3, 2))
print(one_array)
print(one_array.dtype, one_array.shape)
zeros() : 함수 인자로 튜플 형태의 shape 값 입력하면 모든 값을 0으로 채운 해당 shape을 가진 ndarray 반환
ones() : 모든 값을 1로 채운 shape
04 ndarray의 차원과 크기를 변경하기
reshape() : 변환을 원하는 크기를 함수 인자로 부여하며, 지정된 사이즈로 변경이 불가능하면 오류가 발생함
array1 = np.arange(8)
array3d = array1.reshape((2, 2, 2))
print('array3d:\n', array3d.tolist())
# 3차원 ndarray를 2차원 ndarray로 변환
array5 = array3d.reshape(-1, 1)
print('array5:\n', array5.tolist())
print('array5 shape:', array5.shape)
# 1차원 ndarray를 2차원 ndarray로 변환
array6 = array1.reshape(-1, 1)
print('array6:\n', array6.tolist())
print('array6 shape:', array6.shape)
tolist() 메서드를 이용해 리스트 자료형으로 변환 가능함
05 ndarray의 데이터 세트 선택하기 - 인덱싱 (Indexing)
- 단일 값 추출 : 원하는 위치의 인덱스 값 지정하면 해당 위치의 데이터가 반환됨
# 1부터 9까지의 1차원 ndarray 생성
array1 = np.arange(start = 1, stop = 10)
print('array1:', array1)
# index는 0부터 시작하므로 array1[2]는 3번째 index 위치의 데이터값 의미
value = array1[2]
print('value:', value)
print(type(value))
print('맨 뒤의 값:', array1[-1], '맨 뒤에서 두번째 값:', array1[-2])
array1[0] = 9
array1[8] = 0
print('array1:', array1)
array1d = np.arange(start = 1, stop = 10)
array2d = array1d.reshape(3, 3)
print(array2d)
print('(row=0, col=0) index 가리키는 값:', array2d[0, 0])
print('(row=0, col=1) index 가리키는 값:', array2d[0, 1])
print('(row=1, col=0) index 가리키는 값:', array2d[1, 0])
print('(row=2, col=2) index 가리키는 값:', array2d[2, 2])
- 슬라이싱 : 연속된 인덱스상의 ndarray 추출함
array1 = np.arange(start = 1, stop = 10)
array3 = array1[0:3]
print(array3)
print(type(array3))
array1 = np.arange(start = 1, stop = 10)
array4 = array1[:3]
print(array4)
array5 = array1[3:]
print(array5)
array6 = array1[:]
print(array6)
array1d = np.arange(start = 1, stop = 10)
array2d = array1d.reshape(3, 3)
print('array2d:\n', array2d)
print('array2d[0:2, 0:2] \n', array2d[0:2, 0:2])
print('array2d[1:3, 0:3] \n', array2d[1:3, 0:3])
print('array2d[1:3, :] \n', array2d[1:3, :])
print('array2d[:, :] \n', array2d[:, :])
print('array2d[:2, 1:] \n', array2d[:2, 1:])
print('array2d[:2, 0] \n', array2d[:2, 0])
print(array2d[0])
print(array2d[1])
print('array2d[0] shape:', array2d[0].shape, 'array2d[1] shape:', array2d[1].shape)
':' 앞 시작 인덱스 생략하면 맨 처음 인덱스인 0으로 간주
':' 뒤 종료 인덱스 생략하면 맨 마지막 인덱스로 간주
':' 앞, 뒤 생략하면 전체로 간주
- 팬시 인덱싱 : 일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치에 있는 데이터의 ndarray 반환
array1d = np.arange(start = 1, stop = 10)
array2d = array1d.reshape(3, 3)
array3 = array2[[0, 1], 2]
print('array2d[[0, 1], 2] => ', array3.tolist())
array4 = array2[[0, 1], 0:2]
print('array2d[[0, 1], 0:2] => ', array4.tolist())
array5 = array2[[0, 1]]
print('array2d[[0, 1]] => ', array5.tolist())
- 불린 인덱싱 : 특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱스 위치에 있는 데이터의 ndarray 반환
array1d = np.arange(start = 1, stop = 10)
# []안에 array1d > 5 Boolean indexing 적용
array3 = array1d[array1d > 5]
print('array1d > 5 불린 인덱싱 결과 값 :', array3)
array1d > 5
boolean_indexes = np.array([False, False, False, False, False, True, True, True, True])
array3 = array1d[boolean_indexes]
print('불린 인덱스로 필터링 결과:', array3)
indexes = np.array([5, 6, 7, 8])
array4 = array1d[indexes]
print('일반 인덱스로 필터링 결과 :', array4)
순차적 단계
1) ndarray 필터링 조건을 [] 안에 기재
2) False 값 무시하고 True 값에 해당하는 인덱스값만 저장
3) 저장된 인덱스 데이터 세트로 ndarray 조회
06 행렬의 정렬
np.sort() : 원 행렬 그대로 유지한 채 정렬된 행렬 반환
ndarray.sort() : 원 행렬 자체를 정렬한 형태로 반환하며 반환 값은 None
np.argsort() : 정렬 행렬의 원본 행렬 인덱스를 ndarray 형으로 반환
np.argsort()[::-1] : 오름차순이 아닌 내림차순으로 정렬 시 원본 행렬 인덱스 구하기
07 선형대수 연산
- 행렬 내적 (행렬 곱) : np.dot()
- 전치 행렬 : np.transpose()
'Machine Learning' 카테고리의 다른 글
평가 (220928 Update) (0) | 2022.09.21 |
---|---|
사이킷런 (220920 Update) (0) | 2022.09.19 |
판다스 (220916 Update) (0) | 2022.09.14 |
2장. 머신러닝 프로세스 (0) | 2022.07.13 |
1장. 머신러닝, 딥러닝이 무엇인가요? (0) | 2022.07.12 |