ETC| Numpy
in Blog / ETC on Numpy
Numpy 튜토리얼
해당 포스트는 ‘파이썬 머신러닝 완벽가이드(권철민 지음)’ 를 공부하면서 작성하였습니다.
머신러닝의 주요 알고리즘: 선형대수, 통계 기반
- 파이썬에서 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 지원하는 대표적인 패키지로 루프를 사용하지 않고 대량 데이터의 배열 연산을 가능하게 하므로 빠른 배열 연산 속도를 보장
- C/C++과 같은 저수준 언어 기반의 호환 API 제공
- 배열 기반의 연산은 물론이고 다양한 핸들링 기능을 제공
- 많은 파이썬 기반의 패키지가 넘파이를 이용 -> 편의성과 다양한 API 지원 측면에서 아쉬운 부분 많음
- 일반적으로 데이터는 테이블 형태로 이뤄져있지만 다양한 가공과 변환, 여러 통계용 함수의 적용이 필요 -> 넘파이는 파이썬의 대표적인 판다스의 편리성에는 미치지 못함
Numpy 개요
- array(): 리스트와 같은 다양한 인자를 입력받아서 ndarry로 변환
- dtype: ndarray내의 데이터 타입 확인
- astype(): ndarry내 데이터 타입 변경
- arange(): 0부터 함수 인자 값 -1까지의 값을 순차적으로 ndarray의 데이터 값으로 변환(default: 0부터 stop-1)
- zeros(): 함수 인자로 튜플 형태의 shape 값을 입력하면 모든 값을 0으로 채움(dtype default: float64)
- ones(): 함수 인자로 튜플 형태의 shape 값을 입력하면 모든 값을 1으로 채움(dtype default: float64)
- reshape(): ndarray의 차원과 크기를 변경, -1을 인자로 사용하면 원래 ndarray와 호환되는 새로운 shape로 자동으로 재배열
인덱싱(Indexing)
- 특정한 데이터만 추출: 원하는 인덱스 값을 지정하면 해당 위치의 데이터가 반환
- 슬라이싱: ‘:’ 기호 사이에 시작 인덱스와 종료 인덱스를 표시하면 시작 인덱스에서 종료 인덱스-1 위치의 데이터를 반환
- 팬시 인덱싱: 일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치의 데이터를 ndarray로 반환
- 불린 인덱싱: True에 해당하는 인덱스 위치에 있는 데이터의 ndarray 반환
sort(), argsort()
행렬 정렬
- np.sort: 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬 반환
- ndarray.sort(): 원 행렬 자체를 정렬한 형태로 변환, 반환 값은 None
- 기본적으로 오름차순, 내림차순 정렬: [::-1]
- 행렬이 2차원일 경우 axis 축 값 설정을 통해 로우, 칼럼 방향으로 정렬 수행
sort_array2d_axis0 = np.sort(array2d, axis=0) # 로우(행) sort_array2d_axis1 = np.sort(array2d, axis=1) # 칼럼(열)
정렬된 행렬의 인덱스 반환
- 원본 행렬이 정렬되었을 때 기존 원본 행렬의 원소에 대한 인덱스를 필요로 할 때 np.argsort()를 이용
- np.argsort()는 정렬 행렬의 원본 행렬 인덱스를 ndarray 형으로 반환
- 학생 이름과 시험 성적을 각각 ndarray로 활용할 때, 시험 성적 순으로 학생 이름을 출력하고자 한다면 np.argsort()를 이용해서 적용할 수 있음
선형대수 연산
- np.dot(): 행렬 내적(행렬 곱)
- np.transpose(): 전치 행렬(행과 열을 교환)