노션에 적어둔 걸 velog로 옮김!!
numpy 모듈에 대해서는 전공 수업 시간에 배운 적이 있어서 비교적 쉽게 이해할 수 있었다! 그렇지만.. 선형대수라는 매우 큰 벽을 느끼게 된 하루였다..ㅠㅠ 선형대수 강의를 아직 듣지 않았기 때문에 다른 전공 수업에서도 가끔 힘겹다는 느낌을 받은 적이 많았는데 오늘 수업 또한 마찬가지였다. 그래서 반드시!! 선형대수에 대해서 공부할 필요성을 느끼게 되었다..! 그래서 이번 방학 때 선형대수 강의를 들어보기 위해서.. inflearn에서 선형대수 강의를 신청했다! 선형대수 공부를 이제는 더 미룰 수 없을 것 같다.
🧚 Numpy
: python의 list는 연산이 매우 느리기 때문에 비교적 연산이 빠른 numpy를 사용!
numpy의 모듈 불러오기
import numpy as np
numpy array의 indexing과 slicing은 모두 python의 list와 유사하다!
🧚 Array의 Broadcasting
제대로 맞게 이해한 것인지는 모르겠지만, array의 broadcasting은 피연산자들 간에 연산이 가능하도록 피연산자의 형태를 변환해주는 것을 의미한다.
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와 덧셈이 가능해지도록 변환을 해준 뒤에, 덧셈을 실행하는 것을 의미한다.
y = np.array([0, 1, -1])
print(a*y)
'''
[[ 0 2 -3]
[ 0 5 -6]
[ 0 8 -9]]
'''
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()
을 사용한다..! 괄호 안에는 행렬이 들어감
np.linalg.inv()
괄호 안에 행렬 A를 넣어주면, 역행렬 B를 구해준다!💡 행렬 A와 B를 곱하면, 항등행렬(main diagonal이 1인 행렬)이 출력된다
np.linalg.eig()
를 사용 → 고유값과 고유벡터를 모두 구할 수 있다!