2011-03-29 16 views
66

के साथ एक numpy सरणी में अधिकतम तत्व की अनुक्रमणिका कैसे प्राप्त करें मेरे पास 2 आयामी NumPy सरणी है। मुझे पता है कि axes पर अधिकतम मान कैसे प्राप्त करें:एक धुरी

>>> a = array([[1,2,3],[4,3,1]]) 
>>> amax(a,axis=0) 
array([4, 3, 3]) 

मैं अधिकतम तत्वों के सूचकांक कैसे प्राप्त कर सकता हूं? तो मैं आउटपुट के रूप में चाहते हैं array([1,1,0])

+1

वास्तव में 'अधिकतम तत्व' से आपका क्या मतलब है? –

उत्तर

5
v = alli.max() 
index = alli.argmax() 
x, y = index/8, index%8 
69
>>> import numpy as np 
>>> a = np.array([[1,2,3],[4,3,1]]) 
>>> i,j = np.unravel_index(a.argmax(), a.shape) 
>>> a[i,j] 
4 
+1

यह अच्छा है क्योंकि यह बहु आयामी सरणी पर काम करता है। – user1311069

+4

ध्यान दें कि यह उत्तर भ्रामक है। यह सभी अक्षों में सरणी के अधिकतम तत्व की अनुक्रमणिका की गणना करता है, किसी दिए गए अक्ष के साथ नहीं, क्योंकि ओपी पूछता है: यह गलत है। इसके अलावा, यदि एक से अधिक अधिकतम हैं, तो यह केवल पहले अधिकतम के सूचकांक प्राप्त करता है: इसे इंगित किया जाना चाहिए। 'A = np.array ([[1,4,3], [4,3,1]]) के साथ प्रयास करें, यह देखने के लिए कि यह' i, j == 0,1' लौटाता है, और समाधान को ' i, j == 1,0'। इसके बजाय अधिकतम अधिकतम उपयोग के सूचकांक के लिए 'i, j = where (a == a.max() ' – gg349

24

argmax() केवल प्रत्येक पंक्ति के लिए पहली घटना वापस आ जाएगी। http://docs.scipy.org/doc/numpy/reference/generated/numpy.argmax.html

क्या तुमने कभी एक आकार सरणी के लिए यह करने के लिए की जरूरत है, इस काम करता है unravel की तुलना में बेहतर:

import numpy as np 
a = np.array([[1,2,3], [4,3,1]]) # Can be of any shape 
indices = np.where(a == a.max()) 

आप भी अपनी स्थिति बदल सकते हैं:

indices = np.where(a >= 1.5) 

ऊपर आप परिणाम देता है जिस रूप में आपने पूछा था। वैकल्पिक रूप से, आप एक्स, वाई निर्देशांक की एक सूची में परिवर्तित कर सकते हैं:

x_y_coords = zip(indices[0], indices[1]) 
+2

यह मेरे लिए काम नहीं करता ... क्या आपका मतलब है' indices = np.where (a == a.max()) 'लाइन 3 में? – atomh33ls

+0

आप सही हैं, atomh33ls! इसे स्पॉट करने के लिए धन्यवाद। मैंने उस कथन को उचित सशर्त के लिए दूसरे बराबर चिह्न शामिल करने के लिए तय किया है। – SevakPrime

+0

@ सेवकप्रिम, एक दूसरी त्रुटि की ओर इशारा किया गया था @ atomh33ls, '.max() 'के बजाय' .argax() 'के बजाय। कृपया – gg349

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