본문 바로가기
Robot/22년도 자율주행 테크니션 양성과정 일지록

[파이썬] DAY14 Numpy 전치 행렬

by 9루트 2022. 2. 7.

1. 전치행렬 사용

전치 행렬: 행과 열을 교환하여 얻어지는 행렬

행렬의 값들을 주 대각선을 기준으로 위치를 바꾼 행렬을 의미한다.

transpose()

 

 

전치행렬을 쓰는 이유

print(np.transpose(arr))
print(arr.transpose())

은 너무 길어서 아래 처럼 축약해서 쓴다.

print(arr.T) #실제로는 축약한 이 코드로 쓴다.

 

전치를 시켜도 원본은 바뀌지 않는다.

 

 


2. Numpy로 구현된 벡터

 

1. 벡터: 크기와 방향이 있음

1) 가로 벡터(1차원 배열)와 세로 벡터(2차원 배열)

가로 벡터
세로 벡터

2) 벡터의 연산: 덧셈과 뺄셈

각각의 인덱스끼리 연산해주기 위해 넘파이를 사용한다.

벡터의 합
벡터의 차

3) 내적

스칼라의 곱셈

넘파이 배열에서 스칼라 곱셈은 각각 인덱스 별로 곱해진다.

 

내적: 벡터의 각 요소를 곱하여 모두 더한 것

1차원에서는 전치가 되어도 가로 벡터로 유지된다.

일차원 배열은 전치가 안된다.

 

2차원부터 전치가 된다.

4) 벡터의 크기(길이)

피타고라스 정리 이용

np.linalg.norm(넘파이배열)

 

 

 

5) 합의 기호 시그마 ∑

다항식을 쪼개서 표현할 수 있다.

 

결국엔 1) - 5)는 가중치 w와 변수 x의 다항식을 벡터의 내적으로 계산하기 위해 배운 개념이다.

 

연습) 1부터 1000까지 수를 누적해서 더한 값을 구해보자

 

 

 


2. 미분

1) 다항식의 미분

함수의 기울기를 도출하는 방법

미분을 할 때는 어떤 변수를 기준으로 미분할 것인지 정해야 한다.

 

cf) 페프로파게션?? 편미분
회귀 : 그래프를 따라감
분류 : 그래프로 영역을 나눔
인공지능은 데이터로 학습한 딥러닝을 이용해서 수식을 찾아내는 분야이다.

출처: https://mindsee-ai.tistory.com/12

각각의 가중치 노드는 수식을 의미하므로 수없이 많은 수식을 구하는 것이 인공지능이다.

이를 위해서는 합성함수의 미분이 필요하다.

 

2) 중첩된 함수의 미분

연쇄 법칙으로 더 쉽게 미분하도록 한다. → 합성함수의 미분

연쇄 법칙(합성 함수 미분)

3) 편미분

각각의 변수에 대해서 미분하고 더해준다.

 

 

4) 다변수의 중첩 함수의 미분

 

5) 합과 미분의 교환

시그마와 미분 수식을 서로 교환할 수 있다.

미분: 차원을 내리고 -> 곡선의 기울기를 찾는다.
적분: 차원을 올려준다. -> 곡선의 면적을 찾는다.

 


3. Numpy로 구현된 행렬

1. 행렬

가로, 세로 데이터가 모두 포함되는 배열이다. - 이미지

여러개의 방정식의 두 개 이상의 미지수를 풀어내는 연립 방정식을 계산하기 위해 행렬을 사용한다.

 

1) 행렬의 곱

L X M 행렬과 M X N 행렬의 곱

행렬의 곱 = 내적

반드시 전치를 시켜서 행렬의 곱셈 형태로 맞춰주자

 

 

연습) 10y + 4x^2 + 10 = 0을 x =? 로 바꿔보자

풀이1)

10y + 4x^2 + 10 = 0

10y - 10y + 4x^2 + 10 -10 = -10y - 10

(4x^2)/4 = (-10y - 10)/4

x^2 = (-10y - 10)/4

x = 루트{(-10y - 10)/4}

 

즉, 

4x = 1

4x(*4^-1) = 1(*4^-1)

나눗셈이 없는 행렬에서는 역을 곱해서 1로 만든다.

이러한 방식으로 역행렬은 행렬의 나눗셈 처럼 쓰인다고 볼 수 있다.

 

 

2) 역행렬

역행렬은 행렬의 나눗셈을 위해 존재한다. 방정식에서 나눗셈을 하기 위해 역행렬을 곱한다.

cf) 내적은 행렬의 곱을 위해 존재한다.

출처: https://gammabeta.tistory.com/1116

 

아래처럼 역행렬을 만들어주는 메소드(inv)가 존재한다.

x의 역행렬과 x를 곱하면 단위행렬 I가 나온다.

from numpy.linalg import inv

를 꼭 써주자.

 

 

3) 행렬과 연립방정식

역행렬을 곱해줌으로써 각 미지수의 값을 바로 구할 수 있다.

단, 역행렬을 곱해줄 때 AB BA값이 다르게 나오므로 순서를 주의하자

 

연습) 다음 연립 방정식의 해를 구해보자. 

x - y + 2z = 7

6x + 3z = 18

4x + 7y + 17z = 83

답은 제대로 나온다.

하지만 역행렬과 원래 행렬을 곱하면 단위행렬이 나와야 하는데, 아래와 같이 오차가 나오게 된다.

소숫점 단위로단위행렬이지만 오차가 나온다.

 

jupyter { : . 2 f } 소숫점 둘째자리에서 반올림