2011-12-02 8 views
5

Tengo dos matriz numpy (2 dimensiones) p.¿Cómo hacer este tipo de matriz de igualdad rápida (en numpy)?

a1 = array([["a","b"],["a","c"],["b","b"],["a","b"]]) 
a2 = array([["a","b"],["b","b"],["c","a"],["a","c"]]) 

¿Cuál es la forma más elegante de obtener una matriz de esta manera:

array([[1,0,0,0], 
     [0,0,0,1], 
     [0,1,0,0], 
     [1,0,0,0]]) 

Dónde elemento (i, j) es 1 si todos (A1 [i ,:] == a2 [j ,:]) y de otra manera 0

(todo lo relacionado con dos bucles no considero elegante)

Respuesta

10
>>> (a1[:,numpy.newaxis] == a2).all(axis=2) 
array([[ True, False, False, False], 
     [False, False, False, True], 
     [False, True, False, False], 
     [ True, False, False, False]], dtype=bool) 

Si realmente necesita enteros, convertir a int como último paso:

>>> (a1[:,numpy.newaxis] == a2).all(axis=2).astype(int) 
array([[1, 0, 0, 0], 
     [0, 0, 0, 1], 
     [0, 1, 0, 0], 
     [1, 0, 0, 0]]) 
+0

Muy idiomático! +1 – heltonbiker

Cuestiones relacionadas