728x90
반응형
Numpy란?
- Numerical Python
- 파이썬의 고성능 과학 계산용 패키지
- Matrix Vector와 같은 Array 연산의 사실상 표준
- 일반 리스트에 비해 빠르고, 메모리 효율적
- 반복문 없이 데이터 배열에 대한 다양한 처리를 지원
- import numpy as np
Numpy와 배열 (ndarry)
- numpy를 이용한 배열 생성 → ndarray 객체
- 한가지 데이터 타입만 저장 가능! Dynamic typing is not supported!
- test_array = np.array([1, 2, 3, 4], float)
변수명 = np.array(리스트, 데이터타입) - 기존의 파이썬에서 리스트와 같이 데이터의 메모리가 연속적으로 저장되어 있음
→ 연산에서 이점이 있음
→ 메모리의 크기가 일정하여 저장 효율이 좋음
→ 메모리값을 비교하는 is() 함수를 사용했을 때, 같은 값이더라도 메모리값이 달라서 False가 나옴 (참고: https://codechacha.com/ko/python-difference-between-is-and-equals/) - ndarray 의 타입 확인: ndarray.dtype
- 한 종류의 데이터 타입만 저장할 수 있음!
- 데이터 타입은 C의 data type과 compatible - ndarray 의 모양 확인: ndarray.shape
- rank 0: scalar
- rank 1: vector
- rank 2: matrix
- rank 3: 3-tensor
- rank n: n-tensor - ndarray object의 메모리 크기 확인: ndarray.nbytes
- ndarray의 차원의 수: ndarray.ndim
- ndarray의 데이터의 수: ndarray.size
ndarray의 shape 다루기
- reshape(): array의 shape의 크기를 변경함. 데이터의 갯수와 데이터의 순서는 동일함
- 자동 할당 X: 할당이 일어난 것이 아니기 때문에 원본은 그대로임에 유의!
🔥 TIP! 🔥
-1 : size를 기반으로 row 개수를 선정
ex) np.array(test_matrix).reshape(-1, 2).shape # 전체 데이터가 8개인 경우 (4, 2)가 됨
- flatten(): 다차원 array를 1차원 array로 변환 (reshape의 하나의 기능을 또다른 함수로 만든격) - 자동 할당 X
- indexing & slicing:인덱스 값을 사용하여 데이터에 접근 및 추출
- 파이썬의 list와 달리 행과 열 부분을 나눠서 slicing이 가능함
- 띄엄띄엄 추출도 가능함 (예: arr[:, ::2])
ndarray creation
- arange(): array의 범위를 지정하여, 값의 list를 생성하는 명령어
- zeros(): 0으로 가득한 ndarray 생성
- ones(): 1로 가득찬 ndarray 생성
- empty(): shape만 주어지고 비어있는 ndarray 생성 - memory initialization이 되지 않아서,
- 이전 값이 남아있음
- np.zeros_like(), np.ones_like(), np.empty_like()
- identity(): 단위 행렬(i 행렬, 대각행렬)을 생성
- eye(): 대각선인 1인 행렬, identity와 다르게 시작하는 k값의 index를 변경할 수 있음
- diag(): 대각 행렬의 값만을 추출하는 함수
- random sampling: 데이터의 분포에 따른 sampling으로 array를 생성
- np.random.uniform() : 균등분포
- np.random.noraml() : 정규분포
- 이 외에도 다양한 분포 종류에 따라서 랜덤값을 만들 수 있음
Operation Functions
- Operation Function에는 다양한 종류가 있음! 일반적인 산술 통계는 대부분 가능 (sum(), std(), mean(), sqrt(), exp() 등...)
- axis: 모든 operation function을 실행할 때 기준이 되는 dimension 축
- 만약 2차원에서 axis = 0이면, 행 방향으로 작동 ↓ (결과값은 열의 수만큼 나옴)
- 만약 2차원에서 axis = 1이면, 열 방향으로 작동 → (결과값은 행의 수만큼 나옴)
- concatenate(): numpy array를 합치는(붙이는) 함수
- np.vstack(()) : 수직으로 붙이기
- np.hstack(()) : 수평으로 붙이기
- 새로운 축을 추가해주고 싶은 경우
- 방법1: reshape(-1,n)을 하여 형태를 변경
- 방법2: np.newaixs를 사용하여 값은 그대로 두고 축만 하나 추가하도록 한다
- ndaraay간 shape가 같을때 같은 위치에 있는 데이터들끼리 기본적인 사칙연산을 지원함 (element-wise operations)
- dot(): matrix, 즉 기본 행렬간의 곱셈 연산
- transpose(): 전치행렬을 만드는 함수 (행과 열을 바꾸는 것) (.T 라는 property를 사용해도 좋음)
- broadcasting: element-wise operation과 다르게, shape가 다른 배열 간 연산을 지원하는 기능
🔥 유용한 정보 🔥
- timeit: jupyter notebook 환경에서 코드의 퍼포먼스를 측정하는 함수
- 일반적으로 for loop < list comprehension < numpy 로 속도가 빠름
- 100,000,000번의 loop가 돌 때 약 4배 이상의 성능 차이를 보임
Comparisons
- np.all(): 데이터의 전부(and)가 조건에 만족하는지 여부에 따라 T/F 반환
- np.any(): 데이터의 일부(or)가 조건에 만족하는지 여부에 따라 T/F 반환
- numpy는 배열의 크기가 동일할 때, element 간 비교의 결과를 bool 타입으로 반환 → 여기에 all/any 사용 가능
- np.where(): where(condition, TRUE, FALSE) 조건식의 결과에 따라서 참일 경우 TRUE에 위치한 값을 넣고, 거짓일 경우 FALSE에 위치한 값을 삽입
- np.isnan(): null값일 경우TRUE
- np.isfinited(): 한없이 커지는 경우를 찾기 위해, 유한한 값일 경우 TRUE 무한한 값일 경우 FALSE
- np.argmax(), np.argmin(): array내 최대값 또는 최소값의 index를 반환 (axis를 설정할 수도 있음)
- np.argsort(): 작은 값부터 순서대로 인덱스 값을 반환
Boolean & Fancy Index
- Boolean Condition
- 특정 조건에 따른 값을 배열 형태로 추출
- Comparision Operation 함수들도 모두 사용 가능
예) test_array[test_array > 3]
→ 보통 대괄호 안에 들어가는 저 조건식을 condition이라는 변수에 저장해서 사용함 - Boolean List를 사용 + 원래 리스트와 shape이 동일해야 함
- fancy index
- numpy는 array를 index value로 사용해서 값 추출 (리스트 내 값을 인덱스 값으로써 사용한다는 의미)
- take() 함수를 사용하여도 bracket index와 똑같은 효과가 난다!
- Int List를 사용 + 원래 리스트와 shape가 동일하지 않아도 됨 (하지만 값의 범주가 넘어가면 안됨)
Numpy Data I/O
- np.loadtxt(): 파일 호출
- astype(): 데이터 타입 변환
- savetext(): csv 파일로 저장, 구분자(delimiter 지정 가능)
본 포스트는 부트코스 내 네이버 부스트캠프 AI Tech 5기 강의를 토대로 작성되었습니다
728x90
반응형
'Dev > AI 인공지능' 카테고리의 다른 글
[AI] 경사하강법 | 미분이란? | 경사상승법 | Gradient Descent | Differentation (0) | 2023.03.10 |
---|---|
[AI] 벡터와 행렬 | Vector | Matrix | 역행렬 | 유사역행렬 | 무어펜로즈 역행렬 (0) | 2023.03.09 |
[AI] 파이썬의 예외처리 (Exception Handling) | File Handling | Logging (0) | 2023.03.07 |
[AI] 파이썬의 모듈과 프로젝트 (패키지) | 다른 사람이 작성한 코드를 사용하기 (0) | 2023.03.07 |
[AI] 파이썬과 객체 지향 프로그래밍 (Object Oriented Programming, OOP) (0) | 2023.03.07 |