2011-12-02 4 views
5

나는 2 개의 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

나는 우아한 생각하지 않는다 루프이 포함

(모든)

답변

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

관련 문제