Las matrices numpy son estrictamente bidimensionales, mientras que las matrices numpy (ndarrays) son N-dimensional. Los objetos de matriz son una subclase de ndarray, por lo que heredan todos los los atributos y métodos de ndarrays.
La principal ventaja de las matrices numpy es que proporcionan una notación conveniente para la multiplicación de matrices: si a y b son matrices, entonces a * b es su producto matriz .
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]]
Por otro lado, a partir de Python 3.5, NumPy apoya infija multiplicación de matrices usando el operador @
, por lo que puede lograr la misma comodidad de la multiplicación de matrices con ndarrays en Python> = 3.5.
import numpy as np
a=np.array([[4, 3], [2, 1]])
b=np.array([[1, 2], [3, 4]])
print([email protected])
# [[13 20]
# [ 5 8]]
Ambos objetos de matriz y ndarrays tener .T
para volver la transpuesta, pero la matriz objetos también tienen .H
para la transpuesta conjugada, y .I
para la inversa.
En contraste, las matrices numpy cumplen consistentemente con la regla de que las operaciones son aplicadas en cuanto a los elementos (excepto para el nuevo operador @
). Por lo tanto, si a
y b
son matrices numpy, entonces a*b
es la matriz formado por la multiplicación de los componentes de elemento a elemento:
c=np.array([[4, 3], [2, 1]])
d=np.array([[1, 2], [3, 4]])
print(c*d)
# [[4 6]
# [6 4]]
para obtener el resultado de la multiplicación de matrices, se utiliza np.dot
(o @
en Python> = 3,5, como se muestra más arriba):
print(np.dot(c,d))
# [[13 20]
# [ 5 8]]
El operador **
también se comporta de manera diferente:
print(a**2)
# [[22 15]
# [10 7]]
print(c**2)
# [[16 9]
# [ 4 1]]
Dado que a
es una matriz, a**2
devuelve el producto de matriz a*a
. Dado que c
es un ndarray, c**2
devuelve un ndarray con cada componente al cuadrado elemento-sabio.
Existen otras diferencias técnicas entre los objetos de matriz y ndarrays (que tienen que ver con np.ravel, selección de elementos y comportamiento de secuencia).
La principal ventaja de las matrices numpy es que son más generales que las matrices bidimensionales . ¿Qué sucede cuando quieres una matriz tridimensional? Luego, , tiene que usar un ndarray, no un objeto de matriz.Por lo tanto, aprender a usar los objetos de la matriz es más trabajo; debe aprender operaciones de objetos de matriz y operaciones de ndarray.
Escribir un programa que utiliza ambas matrices y matrices hace la vida difícil porque hay que llevar un registro de qué tipo de objeto sus variables son, no sea algo retorno de multiplicación que no esperas.
Por el contrario, si se adhiere únicamente a ndarrays, entonces puede hacer todo lo que objetos de matriz pueden hacer, y más, excepto con funciones/notación ligeramente diferentes .
Si está dispuesto a renunciar al atractivo visual de la notación del producto NumPy matrix (que se puede lograr casi tan elegantemente con ndarrays en Python> = 3.5), entonces creo que las matrices NumPy son definitivamente el camino a seguir.
PS. Por supuesto, realmente no tiene que elegir una a expensas de la otra, ya que np.asmatrix
y np.asarray
le permiten convertir una a la otra (como siempre que la matriz sea bidimensional).
No es una sinopsis de las diferencias entre NumPy arrays
vs NumPy matrix
es here.
No tengo suficiente información para justificar una respuesta, pero por lo que puedo decir, la principal diferencia es la implementación de la multiplicación. Una matriz realiza una multiplicación de matriz/tensor, mientras que una matriz hará una multiplicación de elementos. –
Python 3.5 agregó el operador infijo @ para la multiplicación de matrices (PEP 465) y NumPy 1.10 agregó soporte para ello. Entonces, si está usando Python 3.5+ y NumPy 1.10+, puede simplemente escribir 'A @ B' en lugar de' A.dot (B) ', donde' A' y 'B' son 2D' ndarray's. Esto elimina la principal ventaja de usar 'matriz' en lugar de simplemente' ndarray's, en mi humilde opinión. – MiniQuark