부스트캠프 AI Tech 1기 [T1209 최보미]/U stage

Day6 학습정리 - Numpy / 벡터 / 행렬

B1001101 2021. 1. 25. 23:30

강의 복습

0. numpy

더보기

1) numpy

  • Numerical Python
  • 파이썬의 고성능 과학 계산용 패키지
  • Matrix, Vector와 같은 Array 연산의 사실상의 표준
  • 특징
    • 일반 list에 비해 빠르고, 메모리 효율적
    • 반복문 없이 데이터 배열에 대한 처리를 지원
    • 선형대수와 관련된 다양한 기능 제공
    • C, C++, 포트란 등의 언어와 통합 가능
  • 설치
    • activate ml
      conda install numpy
    • Windows 환경에선 conda로 패키지 관리 필요
    • jupyter 등 설치한 상태에서는 추가 설치 필요 없음
  • 사용: 보통 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와 벡터, 행렬에 대해 배웠다. 학교에서 배웠던 내용인데 다 잊어버려서 다시 복습하는 느낌으로 들었다.