반응형
예제) 행렬 만들기, 역행렬 만들기, '행렬과 역행렬의 곱 = 단위행렬' 검증
1. 역행렬 구하는 함수 - numpy.linalg.inv
x = np.random.randint(1, 10, size=(3, 3))
print(x)
y = np.linalg.inv(x)
print(y)
x @ np.linalg.inv(x) # 행렬과 역행렬을 곱함 = 단위행렬(항등행렬)
결과
더보기
[[8 2 6]
[5 7 5]
[5 8 4]]
[[ 0.21428571 -0.71428571 0.57142857]
[-0.08928571 -0.03571429 0.17857143]
[-0.08928571 0.96428571 -0.82142857]]
array([[ 1.00000000e+00, -2.22044605e-16, 2.22044605e-16],
[ 2.08166817e-16, 1.00000000e+00, 3.33066907e-16],
[ 1.66533454e-16, -4.44089210e-16, 1.00000000e+00]])
2. 정방행렬(정사각형 단위행렬)만 단위행렬을 구할 수 있다.
import numpy as np
# 정방행렬 생성. 정방행렬만 단위행렬을 구할 수 있음.
x = np.random.randint(1, 10, size=(3, 3))
print("행렬 x:")
print(x)
# 역행렬 계산
y = np.linalg.inv(x)
print("행렬 y (x의 역행렬):")
print(y)
# 두 행렬의 곱 계산
result = np.dot(x, y)
print("두 행렬의 곱:")
print(result)
결과
더보기
행렬 x:
[[6 3 9]
[7 6 8]
[3 8 7]]
행렬 y (x의 역행렬):
[[-0.16296296 0.37777778 -0.22222222]
[-0.18518519 0.11111111 0.11111111]
[ 0.28148148 -0.28888889 0.11111111]]
두 행렬의 곱:
[[ 1.00000000e+00 -1.11022302e-16 1.52655666e-16]
[ 0.00000000e+00 1.00000000e+00 1.11022302e-16]
[ 1.66533454e-16 1.11022302e-16 1.00000000e+00]]
3. np.matmul(x,y)는 행렬의 곱셈 구하는 함수다. x, y는 행렬이다.
np.matmul(x,y)
결과
더보기
array([[ 1.00000000e+00, -2.22044605e-16, 2.22044605e-16],
[ 2.08166817e-16, 1.00000000e+00, 3.33066907e-16],
[ 1.66533454e-16, -4.44089210e-16, 1.00000000e+00]])
4. 행렬과 역행렬의 곱이 단위행렬이라는 사실을 검증해보자.
x = np.random.rand(3,3, 3)
print(x)
y = np.linalg.inv(x)
print(y)
결과
[[[0.72819666 0.31030457 0.6665688 ]
[0.59708698 0.11677986 0.14714261]
[0.03585474 0.57924096 0.05727763]]
[[0.29904636 0.27617837 0.08568572]
[0.22714867 0.56424405 0.06569428]
[0.18690973 0.86974536 0.6353435 ]]
[[0.77570816 0.50854745 0.00103691]
[0.74478101 0.06017725 0.85699822]
[0.05351685 0.47722555 0.62830611]]]
[[[-4.86096527e-01 2.27959314e+00 -1.99178919e-01]
[-1.79010121e-01 1.10224203e-01 1.80007245e+00]
[ 2.11459271e+00 -2.54166589e+00 -6.20384986e-01]]
[[ 4.89656621e+00 -1.64019726e+00 -4.90780577e-01]
[-2.14545282e+00 2.82697363e+00 -2.96109264e-03]
[ 1.49648462e+00 -3.38742485e+00 1.72238648e+00]]
[[ 7.39081433e-01 6.35253515e-01 -8.67694083e-01]
[ 8.40463776e-01 -9.70370555e-01 1.32218092e+00]
[-7.01320738e-01 6.82929635e-01 6.61234588e-01]]]
np.matmul(x,y)
x @ np.linalg.inv(x)
# 둘다 행렬을 곱하는 함수.
결과 : 주 대각선이 1이 나오는 것을 확인할 수 있다. 행렬과 역행렬의 곱은 단위행렬이다.
array([[[ 1.00000000e+00, 1.19884383e-16, -7.17840702e-17],
[-1.40518580e-16, 1.00000000e+00, -7.07869813e-17],
[-1.60808076e-17, -1.64861074e-17, 1.00000000e+00]],
[[ 1.00000000e+00, -1.90556964e-17, 3.97734187e-17],
[-2.81526510e-17, 1.00000000e+00, 1.93811499e-17],
[-1.93276086e-16, 1.05945707e-16, 1.00000000e+00]],
[[ 1.00000000e+00, -9.85907931e-17, 4.25028119e-17],
[ 1.41086177e-17, 1.00000000e+00, -4.90676220e-17],
[ 3.76376938e-18, -1.14055265e-17, 1.00000000e+00]]])
array([[[ 1.00000000e+00, 1.19884383e-16, -7.17840702e-17],
[-1.40518580e-16, 1.00000000e+00, -7.07869813e-17],
[-1.60808076e-17, -1.64861074e-17, 1.00000000e+00]],
[[ 1.00000000e+00, -1.90556964e-17, 3.97734187e-17],
[-2.81526510e-17, 1.00000000e+00, 1.93811499e-17],
[-1.93276086e-16, 1.05945707e-16, 1.00000000e+00]],
[[ 1.00000000e+00, -9.85907931e-17, 4.25028119e-17],
[ 1.41086177e-17, 1.00000000e+00, -4.90676220e-17],
[ 3.76376938e-18, -1.14055265e-17, 1.00000000e+00]]])
반응형
'Python' 카테고리의 다른 글
파이썬 pandas.Series는 무엇인가? (1) | 2023.05.31 |
---|---|
(파이썬) 몬테카를로 시뮬레이션을 사용하여 원주율(π) 구하기. (3) | 2023.05.26 |
파이썬 random 서브모듈 함수 (0) | 2023.05.23 |
파이썬(python) Numpy와 ndarray? (0) | 2023.05.22 |
파이썬(Python) 오버라이드(Override), SpecialMethod. (0) | 2023.05.18 |