2011-12-02 10 views
5

मेरे पास दो numpy array (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

संबंधित मुद्दे