Numpy에서 다차원 배열을 '배열'과 '행렬'을 이용해 나타낸다. 이 때 배열과 행렬은 일반적으로 사용하는 '배열'의 형태이다. 둘의 차이는 행렬곱 연산에 사용되는 연산자의 차이뿐이다.
import numpy as np
A = np.array([[1,2], [3,4]]) #배열
B = np.matrix([[1,2], [3,4]]) #행렬
위와 같이 정의했을 때 각각의 자료형은 다음과 같다
배열은 ndarray 객체이고, 행렬은 matrix 객체이다
- 전에는 둘의 행렬곱 연산에 차이가 있었다
- ndarray는 dot 연산을 이용해 나타냈고, matrix는 * 연산을 이용해 행렬곱을 나타냈다
- 지금은 둘을 혼용해서 사용가능하다
- 배열과 행렬을 곱했을 때는 matrix 객체를 반환한다
- @연산자를 사용해 행렬곱이 가능하다
위의 식을 각각 dot, *, @ 을 사용해 나타내면
import numpy.linalg.inv
S = inv(H.dot(V.dot(H.T))) #dot
S = inv(H*V*H.T) #*연산자
S = inv(H@V@H.T) #@연산자
과거에는 ndarray는 dot을 사용해야만 해서 가독성이 떨어졌다. matrix을 사용하면 *연산자를 사용해 가독성을 높일 수 있는 장점이 있었다. 하지만 @연산자가 추가되 ndarray 객체의 가독성도 향상되었고 지금은 * 연산자도 지원하므로 굳이 matrix 객체를 사용할 이유가 사라졌다.
많은 Numpy 함수들이 배열을 리턴하고 둘을 같이 사용하면 혼란을 야기할 수 있으므로 굳이 행렬을 사용할 필요가 없다
'DataScience' 카테고리의 다른 글
[Numpy] 뷰 (0) | 2020.08.26 |
---|---|
[Numpy] ndarray (0) | 2020.08.26 |
아나콘다 라이브러리 설치 (0) | 2020.08.12 |
지수분포의 정의와 평균, 분산 (0) | 2020.08.08 |
푸아송 분포의 정의와 평균, 분산 (0) | 2020.08.07 |