Comparar dos matrices numpy ValueError por filas

Quiero comparar dos matrices NumPy filas y devolver el número de filas iguales.

Si utilizo el siguiente código:

 a=np.array([[1,2],[3,4]]) b=np.array([[1,4],[2,3]]) comp= np.logical_and(np.equal(a,b)) correct=numpy.sum(comp) 

Obtuve el siguiente error:

 ValueError: invalid number of arguments 

Sin embargo, esto funciona:

 np.logical_and([True, False], [False, False]) 

Esto es probablemente muy tonto pero soy nuevo en NumPy . Por favor ayuda.

Solo para extender la respuesta de @mgilson. Tuviste la idea correcta, primero hiciste esto:

 a = np.array([[1,2],[3,4]]) b = np.array([[1,4],[2,3]]) np.equal(a, b) >>>array([[ True, False], [False, False]], dtype=bool) 

Ahora, quiere pasar esto a np.logical_and (), que si observa los documentos, toma dos variables, x1 y x2 ( http://docs.scipy.org/doc/numpy/reference/generated/ numpy.logical_and.html ).

Así que si pasas en la matriz anterior, obtienes lo siguiente:

 np.logical_and(np.array([[True, False], [False, False]])) Traceback (most recent call last): File "", line 1, in  ValueError: invalid number of arguments 

Esto se debe a que np.array ([[Verdadero, Falso], [Falso, Verdadero]]) es una matriz única, es decir, solo dio un valor x1 y no dio un valor x2. Esta es la razón por la que el rastreo le dice “número de argumentos no válido”. Necesitas dar dos valores a esta función.

@ zero323 correctamente le dio una solución, que es simplemente descomprimir los valores en la función. Más específicamente, pase el primer valor de matriz [Verdadero, Falso] a x1, y [Falso, Falso] a x2:

 >>> np.logical_and(*np.equal(a, b)) array([False, False], dtype=bool) 

Creo que quieres algo parecido a:

 np.sum(np.all(np.equal(a, b), axis=1)) 

que puede abreviar a lo siguiente si lo prefiere:

 np.sum(np.all(a == b, axis=1)) 

Esto devolverá 1 para:

 a = np.array([[1, 2], [3, 4]]) b = np.array([[1, 2], [5, 6]]) 

pero 0 para:

 a = np.array([[1, 2], [3, 4]]) b = np.array([[1, 3], [5, 6]]) 

¿Qué tal algo como esto?

 import numpy as np a = np.array([['a', 'b'], ['c', 'd'],\ ['e', 't'], ['a', 'b'], ['a', 'b']]) [['a' 'b'] ['c' 'd'] ['e' 't'] ['a' 'b'] ['a' 'b']] b = np.array([['a','b'],['e','t'],['r','t']]) [['a' 'b'] ['e' 't'] ['r' 't']] shared_rows=0 for row in b: temp=a==row shared_rows+=sum(np.sum(temp, axis=1)==a.shape[1]) print(shared_rows) 4