일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 세계사
- TFRecord
- Perceptron
- itksnap
- 세계대전
- DataSet
- pyqt
- cv2
- deeplearning
- 퍼셉트론
- dtype
- TensorFlow
- opencv
- 유로화
- 블록체인
- Inference
- keras
- terminal
- error
- 딥러닝
- Training
- 비트코인
- img
- TF
- loss
- qtdesigner
- 브렉시트
- 유가 급등
- Python
- numpy
- Today
- Total
활연개랑
[numpy(넘파이)] 행렬곱(내적), 역행렬 구하기 (+ 역행렬 검증하기) 본문
내적: 행렬곱
행렬곱은 아래와 같은 형식을 사용합니다.
np.dot(x,y)
# x.dot(y) 를 사용해도 된다.
x와 y에는 행렬이 들어가야만 행렬 곱을 할 수 있습니다.
다음과 같이 행렬을 지정해줍시다.
import numpy as np
x= np.arange(1,7).reshape(2,3) # 1,6까지 2행3열
y= np.array([[6,23],[-1,7],[8,9]]) # 2개의 배열 3개를 2행3열로 만들기
그리고 행렬곱을 실행해줍니다.
np.dot(x,y)
결과는 다음과 같이 나옵니다.
array([[ 28, 64],
[ 67, 181]])
역행렬
역행렬은 아래와 같은 코드를 사용합니다.
np.linalg.inv()
일단 역행렬을 하기위해 행렬을 하나 만들어줍니다.
np.random.seed(0) # 랜덤으로 뽑은 수 고정시키기
mt1= np.random.randint(1,4,size=(3,3)) # 1~3의 수 중에서 9개를 뽑아 3행 3열로 만들기
행렬을 만든 후에 역행렬 코드를 실행시켜주면 됩니다.
mt2= np.linalg.inv(mt1)
mt2
결과는 아래와 같이 나옵니다.
array([[ 7., -1., -4.],
[-1., 0., 1.],
[-4., 1., 2.]])
#############
한가지 알아두어야 할 점은 np.random.seed(0) 를 하지 않거나, np.random.seed(1)로 지정해주게되면
값은 거의 같지만 값이 조금 더 복잡하게 나오게 됩니다.
아래는 똑같은 코드를 np.random.seed(1)을 했을 경우의 값입니다.
np.random.seed(1)
mt1= np.random.randint(1,4,size=(3,3))
mt2= np.linalg.inv(mt1)
mt2
array([[-1.11022302e-16, 1.00000000e+00, -1.00000000e+00],
[-1.00000000e+00, 1.00000000e+00, 0.00000000e+00],
[ 2.00000000e+00, -3.00000000e+00, 2.00000000e+00]])
정확한 값은 위와 같습니다. 하지만 저는 값을 조금 더 깔끔하게 사용하기 위해 np.random.seed(0)을 사용합니다.
즉 np.random.seed(0)을 하면 근사값 정수가 나오게 됩니다.
###############
역행렬 검증하기
역행렬을 만들기위해 만들어둔 mt1과 mt1을 역행렬로 만든 mt2가 있습니다.
역행렬을 검증하기에 앞서, 다들 알다시피 행렬X와 행렬X의 역행렬을 내적할 경우에는 단위행렬이 나오게됩니다.
즉, mt1과 mt1의 역행렬을 내적(행렬곱)을 할 경우 단위행렬이 나오게 된다는 의미입니다.
단위행렬은 아래와 같습니다.
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
그럼 mt2가 mt1의 역행렬이 맞는지 검증하기 위해서는 mt1과 mt2의 내적(행렬곱)을 구해보면 됩니다.
실행해보도록 하겠습니다.
np.dot(mt1,mt2)
결과:
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
mt1과 mt2의 내적(행렬곱)이 단위행렬인 것을 보니 mt1과 mt2의 관계는 역행렬이 맞다는 것을 확인할 수 있습니다.
'Python' 카테고리의 다른 글
[PyQT(파이큐티)] NameError: name 'widget' is not defined 해결법 (0) | 2021.11.07 |
---|---|
[PyQT(파이큐티)] 배경 변경 방법 (0) | 2021.11.02 |
[pandas(팬더스)] apply/ filter 차이점 (0) | 2021.07.19 |
[pandas(팬더스)] DataFrame 합치기,병합 (concat, merge, join) 차이 (axis=0/ axis=1 차이) (0) | 2021.07.15 |
[Pandas(팬더스)] DataFrame중복 행 삭제 / 특정 열을 기준으로 중복 행 삭제 (0) | 2021.07.15 |