Numpy 행렬 은 엄격하게 2 차원이며 Numpy 배열 (ndarray)은 N 차원입니다. 행렬 객체는 ndarray의 하위 클래스이므로 ndarray의 모든 속성과 메소드를 상속합니다.
numpy 행렬의 주요 장점은 행렬 곱셈에 편리한 표기법을 제공한다는 것입니다. a와 b가 행렬이면 a*b
행렬 곱입니다.
import numpy as np
a = np.mat('4 3; 2 1')
b = np.mat('1 2; 3 4')
print(a)
# [[4 3]
# [2 1]]
print(b)
# [[1 2]
# [3 4]]
print(a*b)
# [[13 20]
# [ 5 8]]
반면에, Python 3.5부터 NumPy는 @
연산자를 사용하여 infix 행렬 곱셈을 지원 하므로 Python> = 3.5에서 ndarray를 사용하여 행렬 곱셈과 동일한 편의를 얻을 수 있습니다.
import numpy as np
a = np.array([[4, 3], [2, 1]])
b = np.array([[1, 2], [3, 4]])
print(a@b)
# [[13 20]
# [ 5 8]]
행렬 객체와 ndarray는 모두 .T
전치 (transpose)를 반환해야하지만 행렬 객체는 .H
켤레 전치 (conjugate transpose)와 .I
역수 (inverse)에도 있습니다.
반대로 numpy 배열은 작업이 요소별로 적용된다는 규칙을 일관되게 준수합니다 (새 @
연산자 제외 ). 경우에 따라서, a
그리고 b
NumPy와 배열은 다음 a*b
요소 와이즈 성분을 곱하여 이루어지는 배열이다 :
c = np.array([[4, 3], [2, 1]])
d = np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
# [6 4]]
행렬 곱셈의 결과를 얻으려면 다음을 사용하십시오 np.dot
(또는 @
위에 표시된 것처럼 Python> = 3.5).
print(np.dot(c,d))
# [[13 20]
# [ 5 8]]
**
운영자는 다르게 동작합니다 :
print(a**2)
# [[22 15]
# [10 7]]
print(c**2)
# [[16 9]
# [ 4 1]]
a
행렬 이므로 a**2
행렬 product를 반환합니다 a*a
. c
ndarray 이므로 c**2
각 구성 요소를 요소 단위로 제곱 한 ndarray를 반환합니다.
행렬 객체와 ndarrays ( np.ravel
항목 선택 및 시퀀스 동작과 관련 이 있음)에는 다른 기술적 차이가 있습니다.
numpy 배열의 주요 장점은 2 차원 행렬보다 더 일반적이라는 것 입니다. 3 차원 배열을 원하면 어떻게됩니까? 그런 다음 행렬 객체가 아닌 ndarray를 사용해야합니다. 따라서 매트릭스 객체 사용을 배우는 것이 더 많은 작업입니다. 매트릭스 객체 작업과 ndarray 연산을 배워야합니다.
행렬과 배열을 혼합하는 프로그램을 작성하면 변수가 어떤 유형의 객체인지 추적해야하기 때문에 곱셈이 예상치 못한 것을 반환하지 않기 때문에 삶을 어렵게 만듭니다.
반대로, ndarray 만 사용하면 약간 다른 기능 / 표기법을 제외하고 매트릭스 객체가 수행 할 수있는 모든 작업을 수행 할 수 있습니다.
NumPy 매트릭스 제품 표기법 (Python> = 3.5의 ndarray로 거의 우아하게 달성 할 수 있음)의 시각적 매력을 기꺼이 포기하고 싶다면 NumPy 배열이 확실히 갈 길이라고 생각합니다.
추신. 물론, 당신은 정말 있기 때문에, 다른의 비용으로 하나를 선택할 필요가 없습니다 np.asmatrix
및 np.asarray
(배열은 2 차원입니다만큼) 당신이 다른 하나를 변환 할 수 있습니다.
NumPy와의 차이점의 개요가 arrays
NumPy와의 대 matrix
ES 여기가 .