¿Cuál es la forma más simple de comparar dos matrices NumPy para la igualdad (donde la igualdad se define como: A = B iff para todos los índices i:) A[i] == B[i]?
Simplemente usando ==me da una matriz booleana:
>>> numpy.array([1,1,1]) == numpy.array([1,1,1])
array([ True, True, True], dtype=bool)
¿Tengo que ver andlos elementos de esta matriz para determinar si las matrices son iguales o hay una forma más sencilla de comparar?
python
arrays
numpy
elementwise-operations
clstaudt
fuente
fuente

np.array_equalIME.(A==B).all()se bloqueará si A y B tienen longitudes diferentes . A partir de 1.10 numpy, == genera una advertencia de desaprobación en este caso .nan!=nanimplica esoarray(nan)!=array(nan).import numpy as npH = 1/np.sqrt(2)*np.array([[1, 1], [1, -1]]) #hadamard matrixnp.array_equal(H.dot(H.T.conj()), np.eye(len(H))) # checking if H is an unitary matrix or notH es una matriz unitaria, entonces H xH.T.conjes una matriz de identidad. Peronp.array_equalregresa FalseLa
(A==B).all()solución es muy clara, pero hay algunas funciones integradas para esta tarea. A saberarray_equal,allcloseyarray_equiv.(Aunque, algunas pruebas rápidas
timeitparecen indicar que el(A==B).all()método es el más rápido, lo cual es un poco peculiar, dado que tiene que asignar una matriz completamente nueva).fuente
(A==B).all(). Por ejemplo, intente:,(np.array([1])==np.array([])).all()daTrue, mientrasnp.array_equal(np.array([1]), np.array([]))daFalse(a==b).all()aún es más rápido quenp.array_equal(a, b)(lo que podría haber verificado un solo elemento y haber salido).np.array_equalTambién trabaja conlists of arraysydicts of arrays. Esto podría ser una razón para un rendimiento más lento.allclose, eso es lo que necesitaba para los cálculos numéricos . Compara la igualdad de vectores dentro de una tolerancia . :)np.array_equiv([1,1,1], 1) is True. Esto se debe a que: Forma consistente significa que tienen la misma forma o que se puede emitir una matriz de entrada para crear la misma forma que la otra.Midamos el rendimiento utilizando el siguiente código.
Salida
De acuerdo con los resultados anteriores, los métodos numpy parecen ser más rápidos que la combinación del operador == y el método all () y al comparar los métodos numpy, el más rápido parece ser el método numpy.array_equal .
fuente
Si desea verificar si dos matrices tienen el mismo
shapeYelementsdebe usar,np.array_equalya que es el método recomendado en la documentación.Casi igual, no hay necesidad de hablar sobre la velocidad.
El se
(A==B).all()comporta más o menos como el siguiente fragmento de código:fuente
Por lo general, dos matrices tendrán algunos pequeños errores numéricos,
Puedes usar
numpy.allclose(A,B), en lugar de(A==B).all(). Esto devuelve un bool verdadero / falsofuente
Ahora usa
np.array_equal. De la documentación:fuente