티스토리 뷰
NumPy에는 다차원 행렬인 배열(array)와 2차원 행렬(matrix)가 있다.
Matrix와 array 사이에 차이가 있을까? 해서 이런 저런 자료를 보다보니, 다음 코드의 실행 결과를 비교하는 글을 보았다.
import numpy as np
a1x4 = np.array([1, 2, 3, 4])
print('Array:')
print(a1x4)
print(a1x4.shape)
m1x4 = np.mat([1, 2, 3, 4])
print('Matrix:')
print(m1x4)
print(m1x4.shape)
결과는 다음과 같을 것이다.
Array:
[1 2 3 4]
(4,)
Matrix:
[[1 2 3 4]]
(1, 4)
Array는 1차원 배열을 생성하지만, matrix는 2차원 배열로 생성이 된다. 물론, array도 다음과 같이 하면, 2차원 배열로 생성할 수 있다.
import numpy as np
a1x4 = np.array([[1, 2, 3, 4]])
print('Array:')
print(a1x4)
print(a1x4.shape)
위 코드 실행 결과는 다음과 같다.
Array:
[[1 2 3 4]]
(1, 4)
다만, matrix의 가장 큰 장점은 직관적인 코드 작성이 가능하다는 것 같다.
예를 들어, 역행렬을 얻고 싶을 때 linalg.inv()를 활용하면 다음과 같다.
import numpy as np
from numpy import linalg
a2x2 = np.array([[1, 2], [3, 4]])
print('Inv. Array:')
print(a2x2)
print(linalg.inv(a2x2))
m2x2 = np.mat([[1, 2], [3, 4]])
print('Inv. Matrix:')
print(m2x2)
print(linalg.inv(m2x2))
위 코드의 결과는 다음과 같다.
Inv. Array:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
Inv. Matrix:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
Matrix를 활용한다면 다음과 같이 쓸 수 있다.
import numpy as np
m2x2 = np.mat([[1, 2], [3, 4]])
print('Inv. Matrix:')
print(m2x2)
print(m2x2.I)
예상 가능하겠지만, np.array를 활용해서 a2x2.I와 같이는 쓸 수 없다. np.mat가 필요하다. 위 코드의 실행 결과는 다음과 같다.
Inv. Matrix:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
구해진 역행렬과 행렬을 곱하면 다음과 같다.
import numpy as np
m2x2 = np.mat([[1, 2], [3, 4]])
print('Unit. Matrix:')
print(m2x2)
print(m2x2.I)
print(m2x2 * m2x2.I)
위 코드의 결과는 다음과 같다.
Unit. Matrix:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
Array에서 *를 사용하면 다음과 같다.
import numpy as np
from numpy import linalg
a2x2 = np.array([[1, 2], [3, 4]])
print('Unit. Array:')
print(a2x2)
print(linalg.inv(a2x2))
print(a2x2 * linalg.inv(a2x2))
print(np.dot(a2x2, linalg.inv(a2x2)))
위 코드를 실행하면 다음과 같다.
Unit. Array:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
[[-2. 2. ]
[ 4.5 -2. ]]
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
배열(Array)에 * 연산을 수행하면, 각 항끼리 곱해버리는 것을 알 수 있다. 내적을 하려면 np.dot을 이용해야 한다. np.mat에 대해서도 np.dot 연산은 당연히 가능하다.
행렬에서 각 항끼리 곱을 하고 싶다면, np,multiply를 활용할 수 있다.
import numpy as np
m2x2 = np.mat([[1, 2], [3, 4]])
print('Unit. Matrix:')
print(m2x2)
print(m2x2.I)
print(m2x2 * m2x2.I)
print(np.multiply(m2x2, m2x2.I))
결과는 다음과 같다.
Unit. Matrix:
[[1 2]
[3 4]]
[[-2. 1. ]
[ 1.5 -0.5]]
[[1.0000000e+00 0.0000000e+00]
[8.8817842e-16 1.0000000e+00]]
[[-2. 2. ]
[ 4.5 -2. ]]
전치행렬은 다음과 같이 구할 수 있다. H나 T로 구할 수 있다.
import numpy as np
m2x2 = np.mat([[1, 2], [3, 4]])
print('Trans. Matrix:')
print(m2x2)
print(m2x2.H)
print(m2x2.T)
실행결과는 다음과 같다.
Trans. Matrix:
[[1 2]
[3 4]]
[[1 3]
[2 4]]
[[1 3]
[2 4]]
행렬 생성을 문자열로 할 때는 세미콜론(;)을 활용한다.
import numpy as np
m2x2 = np.mat('1 2; 3 4')
print(m2x2)
오늘은 간단하게 np.array와 np.mat를 비교해보았다.
'과학실험실' 카테고리의 다른 글
약동학과 약력학, 약을 얼마나 많이, 얼마나 자주 먹어야 할까? (0) | 2023.05.24 |
---|---|
[엑셀함수] 주소를 출력하려면? 주소의 값을 가져오려면? (0) | 2023.05.05 |
NumPy 배열 복사하기 (0) | 2022.01.18 |
TensorFlow 설치하기 (헤매는 중-완료.) (2) | 2021.12.02 |
[엑셀함수] 엑셀로 선형 회귀식의 기울기, Y-절편, R^2 구하기 SLOPE(), INTERCEPT(), RSQ() (0) | 2021.12.01 |
- Total
- Today
- Yesterday
- 식단 조절
- 시간 관리
- 다이어트 기록
- 파이썬
- Python
- live pure
- 약물동태학
- np.array
- 넘파이
- 부업
- Pharmacokinetics
- 다이어트
- 라프텔
- Excel
- 리브퓨어
- 진통제
- 머니 파이프라인
- 일반의약품
- 선형회귀
- 컨디셔닝
- 온타리오
- 엑셀
- 캐나다
- 해열진통소염제
- numpy
- 스위치온
- leeds back
- NSAIDs
- 약동학
- 리즈백
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |