2011-12-02 18 views
5

私は2つのnumpy配列(2次元)を持っています。このような等価配列を高速にするにはどうすればいいですか?

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

次のように行列を得るための最もエレガントな方法は何ですか:

要素(i、j)は、(A1 [I ,:] == A2 [jのすべての場合は1である
array([[1,0,0,0], 
     [0,0,0,1], 
     [0,1,0,0], 
     [1,0,0,0]]) 

、:])とそうでない場合は0

(ループのための2つを含む、すべては私がエレガント考慮していない)

答えて

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に変換最後のステップとして:

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

非常に慣用です! +1 – heltonbiker

関連する問題