2011-12-02 24 views
5

İki numpy dizim var (2 boyutlu) ör.Bu tür bir eşitlik dizisi nasıl hızlı yapılır (sayısal olarak)?

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

böyle bir matris alma en zarif bir yolu ne:

array([[1,0,0,0], 
     [0,0,0,1], 
     [0,1,0,0], 
     [1,0,0,0]]) 
elemanının (i, j) 1

, tüm (a1 [i ,:] == a2 [j ,:]) ve gerçekten tamsayılar gerekiyorsa aksi 0

ben zarif düşünmüyoruz döngüler için iki karıştığı

(herşey)

cevap

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) 

, 0'a dönüştürmekson adım olarak:

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

Çok deyimsiz! +1 – heltonbiker

İlgili konular