2017-07-12 11 views
8

में दो एरे से संकेतक मैट्रिक्स बनाएं दो वैक्टर को देखते हुए, मैं एक सूचक मैट्रिक्स बनाना चाहता हूं। उदाहरण के लिए, a=np.array([5,5,3,4,4,4]) दिया, और b=np.array([5,4,3]), परिणामपायथन नम्पी

5 4 3 

5 1 0 0 
5 1 0 0 
3 0 0 1 
4 0 1 0 
4 0 1 0 
4 0 1 0 

सबसे आसान तरीका है इस लक्ष्य को हासिल करने के लिए क्या है होना चाहिए?

उत्तर

11

का उपयोग NumPy broadcasting -

(a[:,None]==b).astype(int) 

नमूना रन -

In [107]: (a[:,None]==b)*1 
Out[107]: 
array([[1, 0, 0], 
     [1, 0, 0], 
     [0, 0, 1], 
     [0, 1, 0], 
     [0, 1, 0], 
     [0, 1, 0]]) 

-

In [104]: a 
Out[104]: array([5, 5, 3, 4, 4, 4]) 

In [105]: b 
Out[105]: array([5, 4, 3]) 

In [106]: (a[:,None]==b).astype(int) 
Out[106]: 
array([[1, 0, 0], 
     [1, 0, 0], 
     [0, 0, 1], 
     [0, 1, 0], 
     [0, 1, 0], 
     [0, 1, 0]]) 

तो सबसे सरल करके, आप कॉम्पैक्ट मतलब है, यहाँ एक संशोधित एक प्रकार रूपांतरण करना है स्पष्टीकरण:None है numpy.newaxis के लिए उपनाम, जिसका उपयोग एक नया अक्ष जोड़ने के लिए किया जाता है (length=1 के साथ धुरी)। तो, इस मामले में, a[:,None] के साथ हमें संस्करण a मिलता है। 2D संस्करण, a.reshape(-1,1) उनमें से एक होने के कई अन्य तरीके हैं। यह के लिए 1Db के मुकाबले तुलना करने की अनुमति देता है, जिसके परिणामस्वरूप 2 डी सरणी, एक बूलियन सरणी होती है। अंतिम चरण int सरणी में रूपांतरण है।

चरण-दर-चरण रन -

In [141]: a 
Out[141]: array([5, 5, 3, 4, 4, 4]) 

In [142]: b 
Out[142]: array([5, 4, 3]) 

In [143]: a[:,None] 
Out[143]: 
array([[5], 
     [5], 
     [3], 
     [4], 
     [4], 
     [4]]) 

In [144]: a[:,None] == b 
Out[144]: 
array([[ True, False, False], 
     [ True, False, False], 
     [False, False, True], 
     [False, True, False], 
     [False, True, False], 
     [False, True, False]], dtype=bool) 

In [145]: (a[:,None] == b).astype(int) 
Out[145]: 
array([[1, 0, 0], 
     [1, 0, 0], 
     [0, 0, 1], 
     [0, 1, 0], 
     [0, 1, 0], 
     [0, 1, 0]]) 
+0

आपको बहुत बहुत धन्यवाद! यह ठीक वही है जिसकी मुझे तलाश थी। – David

+0

'ए [:, कोई नहीं]' 'a.reshape (-1,1)' के समतुल्य प्रतीत होता है। क्या आप समझा सकते हैं कि यह वास्तव में कैसे काम करता है? – David

+0

@ डेविड पोस्ट में कुछ टिप्पणियां जोड़े गए। उम्मीद है कि वे मदद करते हैं! – Divakar

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