Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 자바개발자
- 프로그래밍
- 백엔드개발자
- UNIDEV
- 라피신
- 프리티어
- 인디게임
- 오블완
- 배포
- Developer
- RDS
- 게임개발동아리
- 위키북스
- 개발공부
- 생활코딩
- UNICON
- 티스토리챌린지
- 체크인미팅
- 백엔드
- CICD
- 전국대학생게임개발동아리연합회
- AWS
- EC2
- 도커
- 스프링부트
- UNICON2023
- 온라인테스트
- 인프라
- 스프링
- 42서울
Archives
- Today
- Total
Hyun's Wonderwall
[AIchemist] 파머완 - CH01. 파이썬 기반의 머신러닝과 생태계 이해 (3. 넘파이) 본문
Study/Python-Machine-Learning
[AIchemist] 파머완 - CH01. 파이썬 기반의 머신러닝과 생태계 이해 (3. 넘파이)
Hyun_! 2023. 9. 18. 22:033. 넘파이
넘파이(NumPy): 파이썬에서 선형대수 기반의 프로그램을 쉽게 만들 수 있도록 지원하는 패키지.
많은 머신러닝 알고리즘이 넘파이 기반으로 작성되어있고, 알고리즘의 입출력 데이터를 넘파이 배열 타입으로 사용함.
넘파이를 이해하는 것은 파이썬 기반 머신 러닝에서 매우 중요.
- 루프를 사용하지 않고 대량 데이터 연산 가능 -> 빠른 배열 연산 속도를 보장.
(과학, 공학 프로그램은 대량 데이터 계산 속도가 중요; 많은 파이썬 기반 과학, 공학 패키지들이 넘파이에 의존) - C/C++과 같은 저수준 언어 기반의 호환 API 제공.
-> 파이썬 자체의 수행 성능 제약(느림)... 수행 성능이 매우 중요한 부분은 C/C++ 기반 코드로 작성하고 이를 넘파이에서 호출하는 방식으로 통합. (ex. 구글의 텐서플로: 이러한 방식으로 배열 연산 수행 속도 개선, 넘파이와 호환o) - 넘파이는 배열 기반 연산과 데이터 핸들링 가능. But 데이터 처리 시에... 편의성과 다양한 API 지원 측면에서 아쉬운 부분이 많음. So 데이터 핸들링을 할 때에는 판다스를 이용할 것임.(파이썬의 대표적인 데이터 처리 패키지, 편리)
넘파이의 기본 지식, 이 책에서 자주 사용되는 넘파이 API를 알아보자.
3.1. 넘파이 ndarray 개요
import numpy as np #넘파이 모듈 임포트 (numpy를 np로 alias함)
(import numpy만 해도 기능되나) as np를 추가해 약어 'np'로 모듈을 표현하는 게 관례. (*alias: 별명)
넘파이의 기반 데이터 타입: ndarray
[1 2 3] 와 같이 표현됨, 파이썬의 리스트와 달리 ','가 없다
-> 다차원 배열을 쉽게 생성, 다양한 연산 수행 가능
*아래에서 ndarray는 생성된 ndarray 배열을 말함
- np.array( ) : 다양한 인자를 입력받아 ndarray로 변환하는 메소드. (리스트 등을 ndarray로 반환 시 사용)
- ndarray.shape : ndarray의 크기, 즉 행과 열의 수를 튜플 형태로 가짐. 이를 통해 ndarray의 차원까지 알 수 있음.
- 1차원: ex. (1, )
- 2차원: (행의 수, 열의 수) - ndarray.ndim : ndarray의 차원을 숫자로 반환(1, 2, ...)
3.2. ndarray의 데이터 타입
- ndarray 내 데이터 값은 숫자 값, 문자열 값, 불 값 모두 가능
- ndarray.dtype : ndarray 내 데이터 타입 확인하는 속성. (int32, float64 등...)
- ndarray 내 데이터 타입은 같은 데이터 타입만 가능.
-> 만약 다른 데이터 타입이 섞여 있는 리스트를 ndarray로 변형 시, 더 큰 데이터 타입으로 형 변환 일괄 적용됨
- ndarray 내 데이터 타입은 같은 데이터 타입만 가능.
- ndarray.astype( ) : ndarray 내 데이터 값 타입 변경 시 사용하는 메소드. 인자로 원하는 타입을 문자열로 지정.
ex. array_int.astype('float64') # array_int가 [1 2 3]에서 [1. 2. 3.]으로 타입 변경됨.
3.3. ndarray를 편리하게 생성하기 - arange, zeros, ones
일괄적으로 초기화할 때 많이 사용.
- np.arange( ) : 인자로 stop 값 받아, 0부터 stop-1까지의 연속값으로 구성된 1차원 ndarray 생성.
- start값도 부여 가능. array를 range( )로 표현한 것.
ex. sequence_array = np.arange(10)과 같이 쓴다. - np.zeros( ) : 인자로 튜플 형태 shape 값을 받아, 모든 값을 0으로 채운 해당 shape의 ndarray를 반환.
- np.ones( ) : 인자로 튜플 형태 shape 값을 받아, 모든 값을 1로 채운 해당 shape의 ndarray 반환.
- 함수 인자로 dtype 정해주지 않으면 default는 float64
ex. np.ones((1, 2)) 하면 [[1. 1. ]]이렇게 된다.
3.4. ndarray의 차원과 크기를 변경하는 reshape( )
- ndarray.reshape( ) : ndarray를 특정 차원 및 크기로 변환. 지정된 사이즈로 변경 불가능하면 오류 발생.
- 인자로 -1을 사용하면 원래 ndarray와 호환되는 새로운 shape로 변환.
ex. array1의 shape가 (10, )일 때 array1.reshape(-1, 5)하면 (2, 5)로 변환, array1.reshape(5, -1)하면 (5, 2)로 변환. 그러나 (-1, 4)는 오류 발생할 것임.
- reshape(-1, 1)과 같은 형태로 자주 사용됨. (특: 2차원, 1개 칼럼에 여러개의 로우.) - ndarray.tolist( ) : ndarray를 리스트 자료형으로 변환.
3.5. 넘파이 ndarray의 데이터 세트 선택하기 - 인덱싱(Indexing)
- 단일 값 추출
특정한 데이터만 추출. 원하는 위치의 인덱스 값 지정.
ex. array1[2] # 두번째 값
array1[-1] # 맨 뒤 값 (-2로 하면 맨 뒤에서 두 번째)
다차원은 array2d[2, 3] - 슬라이싱
연속된 인덱스상의 ndarray를 추출하는 방식. 'start:end' (*start에서 end-1 위치에 있는 ndarray를 반환.
ex. array1[1:3] # 인덱스 1, 2 요소 출력
array[:3] # 인덱스 0부터 2까지의 요소 출력
array[3:] # 인덱스 3부터 마지막까지의 요소 출력
array1[:] # 인덱스 전체 출력 - 팬시 인덱싱
일정한 인덱싱 집합을 리스트 또는 ndarray 형태로 지정해 해당 위치에 있는 ndarray 반환.
ex. array2d[[0, 1], 2]
array2d[[0, 1], 0:2] - 불린 인덱싱
특정 조건에 해당하는지 여부인 True/False 값 인덱싱 집합을 기반으로 True에 해당하는 인덱스 위치에 있는 데이터의 ndarray를 반환.
ex. array1d[array1d > 5]
<불린 인덱싱이 동작하는 단계>
(1) array1d > 5와 같이 ndarray의 필터링 조건을 [ ] 안에 기재
(2) False값은 무시하고 True값에 해당하는 인덱스값만 저장
*유의해야 하는 사항: True값 자체인 1을 저장하는 것이 아니라 True값을 가진 인덱스를 저장.
(3) 저장된 인덱스 데이터 세트로 ndarray 조회
3.6. 행렬의 정렬 - sort( )와 argsort( )
행렬 정렬
- np.sort( )
# org_array = np.array([3, 1, 9, 5])
ex. sort_array1 = np.sort(org_array)
넘파이에서 sort( )를 호출, 인자로 행렬 대입. 원 행렬은 그대로 유지한 채 원 행렬의 정렬된 행렬을 반환. - ndarray.sort()
ex. sort_Array2 = org_array.sort()
원 행렬 자체를 정렬된 형태로 반환, 반환 값은 None임. - np.argsort( )
ex. sort_indices = np.argsort(org_array)
원본 행렬이 정렬되었을 떄 기존 원본 행렬의 원소에 대한 인덱스가 필요할때 np.argsort( )를 이용한다.
정렬 행렬의 원본 행렬 인덱스를 ndarray 형으로 반환.
*오름차순이 아닌 내림차순으로 정렬 시에는 np.argsort( )[::-1]와 같이 한다.
sort_indices_desc = np.argsort(org_array)[::-1]
*넘파이에서 매우 활용도가 높음
3.7. 선형대수 연산 - 행렬 내적과 전치 행렬 구하기
행렬 내적(행렬 곱) : np.dot(_, _)
np.dot(A, B) : 두 행렬 A와 B의 내적
ex. dot_product = np.dot(A, B)
전치 행렬 : np.transpose( )
ex. transpose_mat = np.transpose(A)
다음 글: CH01 - 4. 판다스
'Study > Python-Machine-Learning' 카테고리의 다른 글
[AIchemist] 파머완 - CH03. 평가 (1~5) (0) | 2023.09.26 |
---|---|
[AIchemist] 파머완 - CH02. 사이킷런으로 시작하는 머신러닝 (6. 사이킷런으로 수행하는 타이타닉 생존자 예측) (0) | 2023.09.25 |
[AIchemist] 파머완 - CH02. 사이킷런으로 시작하는 머신러닝 (1~5) (0) | 2023.09.19 |
[AIchemist] 파머완 - CH01. 파이썬 기반의 머신러닝과 생태계 이해 (4. 데이터 핸들링 - 판다스) (0) | 2023.09.19 |
[AIchemist] 파머완 - CH01. 파이썬 기반의 머신러닝과 생태계 이해 (1, 2) (0) | 2023.09.18 |