2011-12-02 21 views
5

我有两个numpy阵列(2维),例如如何使这种平等数组快速(在numpy中)?

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

什么是得到一个矩阵像这样的最优雅的方式:

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

其中元素(I,J)为1,如果所有(A1 [我,:] == A2 [J ,:]),否则0

(一切涉及两个for循环,我不认为优雅)

回答

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) 

如果你真的需要整数,则转换为int作为最后一步:

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