강의 복습
0. numpy
더보기
1) numpy
- Numerical Python
- 파이썬의 고성능 과학 계산용 패키지
- Matrix, Vector와 같은 Array 연산의 사실상의 표준
- 특징
- 일반 list에 비해 빠르고, 메모리 효율적
- 반복문 없이 데이터 배열에 대한 처리를 지원
- 선형대수와 관련된 다양한 기능 제공
- C, C++, 포트란 등의 언어와 통합 가능
- 설치
- activate ml
conda install numpy - Windows 환경에선 conda로 패키지 관리 필요
- jupyter 등 설치한 상태에서는 추가 설치 필요 없음
- activate ml
- 사용: 보통 np라는 별칭(alias) 이용해서 호출
- import numpy as np
2) ndarray
- numpy는 np.array 함수 활용해서 배열 생성
- np.array(배열)
- 하나의 데이터 타입만 배열에 넣을 수 있음
- dynamic typing 지원 안 됨 → list와 가장 큰 차이점
- C의 array 사용하여 배열 생성
- ndarray.shape: dimension 구성 반환 (array의 크기, 형태 등에 대한 정보)
- rank에 따라 이름이 있음(0: scalar, 1: vector, 2: matrix, 3: 3-tensor, n: n-tensor)
- ndarray.dtype: 데이터 타입 반환
- ndarray.nbytes: ndarray object의 메모리 크기 반환
3) Handling shape
- ndarray.reshape(): Array의 shape의 크기 변경, element 개수는 동일
- ndarray.flatten(): 다차원 array를 1차원으로 변환
4) indexing & slicing
- list와 달리 이차원 배열에서 [행, 열] 표기법 제공
- list와 달리 행과 열 부분을 나눠서 slicing 가능
5) creation function
- array의 범위를 지정하여 값의 list를 생성하는 명령어
- np.zeros(): 0으로 가득찬 ndarray 생성
- np.ones(): 1로 가득찬 ndarray 생성
- np.empty(): shape만 주어지고 비어있는 ndarray 생성
- zeros_like, ones_like, empty_like: 기존 ndarray의 shape만큼 1, 0 또는 empty array 반환
- np.identity(): 단위 행렬 생성
- np.eye(): 대각선이 1인 행렬 생성, 시작 index 변경 가능
- np.diag(): 대각 행렬의 값 추출
- random sampling: 데이터 분포에 따른 sampling으로 array 생성
- np.random.uniform(): 균등분포
- np.random.normal(): 정규분포
6) operation functions
- axis: 모든 operation function을 실행할 때 기준이 되는 dimension 축 (행: 0, 열: 1)
- ndarray.sum(): element간의 합 구함
- mean(), std(): element간의 평균 또는 표준편차 반환
- np.concatenate((array1, array2), axis): numpy array 합치는 함수
7) array operations
- numpy는 array간의 기본적인 사칙 연산 지원
- element-wise operations: Array간 shape 같을 때 일어나는 연산
- dot product: ndarray1.dot(ndarray2)
- transpose: ndarray.transpose() 또는 ndarray.T
- broadcasting: shape 다른 배열 간 연산 지원 (scalar-vector, vector-matrix 등)
- %timeit: jupyter에서 코드 퍼포먼스 체크 (일반적으로 속도: for loop < list comprehension < numpy
8) comparisons
- np.all(), np.any(): Array 데이터 전부(and) 또는 일부(or)가 조건에 만족하는지 여부 반환
- 배열 크기가 동일할 때 element간 비교 결과 boolean type으로 반환
- np.where(): 조건 만족하는 인덱스 배열 반환
- argmax, argmin: 최대값 또는 최소값의 인덱스 반환
9) boolean & fancy index
- boolean index: 특정 조건에 따른 값을 배열 형태로 추출, comparison operation 함수들도 모두 사용 가능
- fancy index: array를 인덱스로 사용해서 값 추출
- ndarray1.take(ndarray2): ndarray1[ndarray2]와 같은 효과
10) numpy data i/o
- np.loadtxt(), np.savetxt(): text type의 데이터를 읽고 저장하는 기능
1. 벡터
더보기
1) 벡터(vector)
- 숫자를 원소로 가지는 리스트 또는 배열
- 공간에서 한 점을 나타냄
- 원점으로부터 상대적 위치 표현
- 숫자를 곱해주면 길이만 변함
- 같은 모양을 가지면 덧셈, 뺄셈, 성분곱(hadamard product) 계산할 수 있음
2) 벡터의 덧셈과 뺄셈
- 두 벡터의 덧셈: 다른 벡터로부터 상대적 위치이동 표현
3) norm
- 원점에서부터의 거리
- L1-norm: 각 성분의 변화량의 절대값 모두 더함
- L2-norm: 피타고라스 정리를 이용해 유클리드 거리 계산
- norm의 종류에 따라 기하학적 성질 달라짐
4) 벡터 사이의 거리
- norm을 이용해 두 벡터 사이의 거리 계산할 수 있음
- 두 벡터 사이의 거리 계산할 때에는 벡터의 뺄셈 이용
5) 벡터 사이의 각도
- 제2 코사인 법칙에 의해 두 벡터 사이의 각도 계산할 수 있음
6) 내적
- 정사영의 길의를 벡터 y의 길이만큼 조정한 값
2. 행렬
더보기
1) 행렬 (matrix)
- 벡터를 원소로 가지는 2차원 배열
- 행(row)과 열(column)이라는 인덱스 가짐
- 행(열)벡터라고도 부름
- 공간에서 여러 점들을 나타냄
2) 행렬의 덧셈, 뺄셈, 성분곱, 스칼라곱
- 행렬끼리 같은 모양 가지면 덧셈, 뺄셈 계산할 수 있음
- 성분곱, 스칼라곱은 벡터와 똑같음
3) 행렬 곱셈
- i번째 행벡터와 j번째 열벡터 사이의 내적을 성분으로 가지는 행렬
- np.inner(): i번째 행벡터와 j번째 행벡터 사이의 내적을 성분으로 가지는 행렬 계산
- 행렬: 벡터공간에서 사용되는 연산자(operator)
- 행렬곱을 통해 벡터를 다른 차원의 공간으로 보낼 수 있음
- 행렬곱을 통해 패턴을 추출할 수 있고 데이터를 압축할 수 있음
4) 역행렬 (Inverse matrix)
- 어떤 행렬 A의 연산을 거꾸로 되돌리는 행동, A-1라 표기
- 행과 열 숫자가 같고 행렬식(determinant)이 0이 아닌 경우에만 계산 가능
- AA-1 = A-1A = I(항등행렬)
- 역행렬을 계산할 수 없다면 유사역행렬(pseudo-inverse) 또는 무어-펜로즈(Moore-Penrose) 역행렬 A+을 이용
- n >= m -> A+ = (ATA)-1AT
n <= m -> A+ = AT(AAT)-1 - np.linalg.pinv()
- 연립방정식의 해 구할 수 있음
- 데이터를 선형모델(linear model)로 해석하는 선형회귀식 찾을 수 있음 (sklearn의 LinearRegression과 같은 결과)
피어세션
오늘 피어세션에서는 configuration에 대해 발표했다. 설정파일을 건드리거나 커맨드 실행할 때 옵션 추가하는 것을 해 본 적은 있지만 직접 정의해본 적은 없어서 생소했는데 발표를 준비하면서 configparser와 argparse 사용법을 확실히 익히게 되었다. argparse같은 경우에는 머신러닝을 비롯해 여러 코드에서 쓰인다고 하니 잘 알아둬야겠다.
configuration.pdf
1.14MB
코멘트
이번주에는 매일 과제랑 퀴즈가 있다고 해서 걱정했는데 다행히 과제는 이번주 내내 없는 걸로 바뀌었고 퀴즈도 어렵지 않아서 이번주는 생각보다 여유로울 것 같다. 오늘은 numpy와 벡터, 행렬에 대해 배웠다. 학교에서 배웠던 내용인데 다 잊어버려서 다시 복습하는 느낌으로 들었다.
'부스트캠프 AI Tech 1기 [T1209 최보미] > U stage' 카테고리의 다른 글
Day8 학습정리 - Pandas I / 딥러닝 학습방법 이해하기 (0) | 2021.01.27 |
---|---|
Day7 학습정리 - 경사하강법 (0) | 2021.01.26 |
Day5 학습정리 - 파이썬으로 데이터 다루기 (0) | 2021.01.22 |
Day4 학습정리 - 파이썬 기초 문법 III (0) | 2021.01.21 |
Day3 학습정리 - 파이썬 기초 문법 II (0) | 2021.01.20 |