Compruebe si dos scipy.sparse.csr_matrix son iguales

Quiero comprobar si dos csr_matrix son iguales.

Si lo hago:

x.__eq__(y) 

Yo obtengo:

 raise ValueError("The truth value of an array with more than one " ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all(). 

Esto, sin embargo, funciona bien:

 assert (z in x for z in y) 

Hay una mejor manera de hacerlo? scipy vez usando alguna función optimizada scipy lugar?

Muchas gracias

¿Podemos asumir que tienen la misma forma?

 In [202]: a=sparse.csr_matrix([[0,1],[1,0]]) In [203]: b=sparse.csr_matrix([[0,1],[1,1]]) In [204]: (a!=b).nnz==0 Out[204]: False 

Esto comprueba la dispersión de la matriz de desigualdad.

Le dará una advertencia de eficiencia si prueba a==b (al menos la primera vez que lo usa). Eso es porque todos aquellos que tendrían que probar todos esos ceros.

Necesita una versión relativamente reciente para usar operadores lógicos como este. ¿Estabas tratando de usar x.__eq__(y) en alguna expresión if , o recibiste un error solo de esa expresión?

En general, es probable que desee comprobar varios parámetros primero. La misma shape , la misma nnz , el mismo tipo de dtype . Hay que tener cuidado con los flotadores.

Para matrices densas, np.allclose es una buena manera de probar la igualdad. Y si las matrices dispersas no son demasiado grandes, eso también podría ser bueno

 np.allclose(aA, bA) 

allclose usa all(less_equal(abs(xy), atol + rtol * abs(y))) . Puede usar ab , pero sospecho que esto también dará una advertencia de eficiencia.