Week1 - 2

이현지·2021년 7월 26일
0

KMU_summer_AI

목록 보기
2/8

Numpy, 선형대수

노션에 적어둔 걸 velog로 옮김!!


numpy 모듈에 대해서는 전공 수업 시간에 배운 적이 있어서 비교적 쉽게 이해할 수 있었다! 그렇지만.. 선형대수라는 매우 큰 벽을 느끼게 된 하루였다..ㅠㅠ 선형대수 강의를 아직 듣지 않았기 때문에 다른 전공 수업에서도 가끔 힘겹다는 느낌을 받은 적이 많았는데 오늘 수업 또한 마찬가지였다. 그래서 반드시!! 선형대수에 대해서 공부할 필요성을 느끼게 되었다..! 그래서 이번 방학 때 선형대수 강의를 들어보기 위해서.. inflearn에서 선형대수 강의를 신청했다! 선형대수 공부를 이제는 더 미룰 수 없을 것 같다.


🧚 Numpy
: python의 list는 연산이 매우 느리기 때문에 비교적 연산이 빠른 numpy를 사용!

numpy의 모듈 불러오기

import numpy as np

numpy array의 indexing과 slicing은 모두 python의 list와 유사하다!


🧚 Array의 Broadcasting
제대로 맞게 이해한 것인지는 모르겠지만, array의 broadcasting은 피연산자들 간에 연산이 가능하도록 피연산자의 형태를 변환해주는 것을 의미한다.

  1. M by N, M by 1
a = np.array([[1,2,3], [4,5,6], [7,8,9]]) # 3x3 행렬
x = np.array([0,1,0])  # 1차원 배열

x = x[:, None] # transpose
print(a+x)

'''
[[1 2 3]
 [5 6 7]
 [7 8 9]]
'''

이처럼 연산 x 배열이 a와 덧셈이 가능해지도록 변환을 해준 뒤에, 덧셈을 실행하는 것을 의미한다.

  1. M by N, 1 by N
y = np.array([0, 1, -1])

print(a*y)

'''
[[ 0  2 -3]
 [ 0  5 -6]
 [ 0  8 -9]]
'''
  1. M by 1, 1 by N
t = np.array([1,2,3]) # 열벡터로 바꿔줘야 함!
t = t[:, None] #transpose

u = np.array([2,0,-2])

print(t+u)

'''
[[ 3  1 -1]
 [ 4  2  0]
 [ 5  3  1]]
'''

🧚 선형대수

  • 영벡터(행렬)
    np.zeros(dim) → dim은 값 또는 튜플!

  • 일행렬
    np.ones(dim)

  • 대각행렬
    np.diag((main_diagnals))

  • 항등행렬: main_diagonal이 1인 대각행렬!
    np.eye(n, (dtype=int,uint,float,complex, ...))

💡 n → nxn 행렬 생성, dtype → 0이 아닌 값들의 타입을 결정해준다!
  • 행렬곱
    np.dot() or @사용!
💡 np.dot()은 함수처럼 사용, @는 연산자 기호처럼 사용한다!
  • 트레이스: main_diagonal을 더한 값을 출력해준다.
    np.trace()

  • 행렬식: 선형변환 과정에서 Vector의 Scaling 척도 → 이해가 쉽지 않다.... 선형대수 공부를 더 해봐야될 듯ㅠㅠ

💡 행렬식은 어떤 행렬에 대해서 역행렬이 존재하는지 감별해주는 공식으로, 
   행렬식의 값이 0이면 역행렬이 존재하지 않는다는 것을 의미한다. 

np.linalg.det() 을 사용한다..! 괄호 안에는 행렬이 들어감

  • 역행렬: 행렬 A에 대해서 AB = BA = I를 만족하는 행렬 B
    np.linalg.inv() 괄호 안에 행렬 A를 넣어주면, 역행렬 B를 구해준다!
💡 행렬 A와 B를 곱하면, 항등행렬(main diagonal이 1인 행렬)이 출력된다
  • 고유값과 고유벡터: 정방행렬 (nxn) A에 대해서 Ax = λx 을 만족하는 λ와 x를 각각 고유값과 고유벡터라고 한다.
    np.linalg.eig()를 사용 → 고유값과 고유벡터를 모두 구할 수 있다!
profile
열심히 살아보자구

0개의 댓글