2011-12-02 6 views
5

Mam dwie tablice numpy (dwuwymiarowe) np.Jak zrobić ten rodzaj tablicy równości szybko (w numpy)?

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

Jaki jest najbardziej elegancki sposób na uzyskanie macierzy tak:

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

Gdzie elementu (i, j) jest 1 jeśli wszystko (a1 [i ,:] == a2 [j ,:]) i inaczej 0

(wszystko z udziałem dwóch pętli nie uważam elegancki)

Odpowiedz

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) 

Jeśli naprawdę potrzebujesz liczb całkowitych, konwersja do int jako ostatni krok:

>>> (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

Bardzo idiomatyczny! +1 – heltonbiker