2016-05-18 10 views
5

मान लीजिए कि मेरे पास एमएक्सएन का एक मैट्रिक्स ए है और एमएक्स 1 का वेक्टर है। मैं प्रत्येक पंक्ति में ऑफसेट के रूप में वैक्टर के तत्वों का उपयोग करके मैट्रिक्स ए की प्रत्येक पंक्ति से तत्व निकालना चाहता हूं।numpy का उपयोग कर सूचकांक के वेक्टर का उपयोग कर मैट्रिक्स से तत्व निकालने के लिए कैसे?

उदाहरण के लिए,

A = [[3, 0, 0, 8, 3], 
    [9, 3, 2, 2, 6], 
    [5, 5, 4, 2, 8], 
    [3, 8, 7, 1, 2], 
    [3, 9, 1, 5, 5]] 

और एक वेक्टर

y = [4,2,1,3,2] 

क्या मैं हासिल करना चाहते हैं कि मैं एक ऐसे के तत्वों को निकालने के लिए एक तरह से चाहते है कि वेक्टर अनुक्रमित के प्रत्येक तत्व एक ए, यानी की इसी पंक्ति में तत्व, किसी भी स्पष्ट छोरों के उपयोग के बिना

for i in xrange(y): 
    A[i,y[i]] = #perform operations here 

को लागू करने ।

उम्मीद उत्पादन होता है,

[3,2,5,1,1] 

मैं अजगर और numpy लाइब्रेरी का उपयोग कर रहा हूँ।

सहायता के लिए धन्यवाद!

+0

आप भी उम्मीद उत्पादन किया जा सका ? – AKS

उत्तर

6

आप एक NumPy सरणी में सूची A परिवर्तित करके शुरू कर देना चाहिए:

>>> import numpy as np 
>>> A = np.array([[3, 0, 0, 8, 3], 
...    [9, 3, 2, 2, 6], 
...    [5, 5, 4, 2, 8], 
...    [3, 8, 7, 1, 2], 
...    [3, 9, 1, 5, 5]]) 
... 
>>> y = [4, 2, 1, 3, 2] 

और उसके बाद, कुछ भी नहीं advanced indexing का उपयोग करने से रोकता है:

>>> A[np.arange(A.shape[0]), y] 
array([3, 2, 5, 1, 1]) 
>>> A[np.arange(A.shape[0]), y] = -99 
>>> A 
array([[ 3, 0, 0, 8, -99], 
     [ 9, 3, -99, 2, 6], 
     [ 5, -99, 4, 2, 8], 
     [ 3, 8, 7, -99, 2], 
     [ 3, 9, -99, 5, 5]]) 
+0

हां, यह बहुत अच्छा काम करता है। आपको बहुत - बहुत धन्यवाद! –

0

निम्नलिखित पारंपरिक पायथन शैली का पालन करता है, लेकिन गति के लिए अनुकूलित नहीं है। इसे आज़माएं और देखें कि यह आपके उपयोग के मामले में काम करता है या नहीं।

A = [[1, 0, 0, 6, 1], 
    [8, 2, 1, 1, 5], 
    [1, 1, 0, 0, 4], 
    [3, 8, 7, 1, 2], 
    [3, 9, 1, 5, 5]] 

b = [0, 1, 2, 3, 4] 

result = [A[i][b_i] for i, b_i in enumerate(b)] 
# -> [1, 2, 0, 1, 5] 
संबंधित मुद्दे

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