2012-02-28 18 views
52

लौटने वाले numpy सरणी का Argmax मैं एक Numpy सरणी में अधिकतम तत्व के सूचकांक प्राप्त करने की कोशिश कर रहा हूँ। यह numpy.argmax का उपयोग करके किया जा सकता है। मेरी समस्या यह है कि मैं पूरी सरणी में सबसे बड़ा तत्व ढूंढना चाहता हूं और इसके सूचकांक प्राप्त करना चाहता हूं।गैर-फ्लैट सूचकांक

numpy.argmax या तो एक धुरी के साथ लागू किया जा सकता है, जो मैं नहीं चाहता, या चपटे सरणी पर, जो कि मैं चाहता हूं।

मेरी समस्या यह है कि numpy.argmaxaxis=None के साथ फ्लैट इंडेक्स लौटाता है जब मैं बहु-आयामी सूचकांक चाहता हूं।

मैं गैर-फ्लैट सूचकांक प्राप्त करने के लिए divmod का उपयोग कर सकता हूं लेकिन यह बदसूरत लगता है। क्या ऐसा करने का कोई बेहतर तरीका है?

उत्तर

90

आप numpy.argmax() के परिणाम पर numpy.unravel_index() इस्तेमाल कर सकते हैं:

>>> a = numpy.random.random((10, 10)) 
>>> numpy.unravel_index(a.argmax(), a.shape) 
(6, 7) 
>>> a[6, 7] == a.max() 
True 
16
np.where(a==a.max()) 

अधिकतम तत्वों के निर्देशांक देता है, लेकिन सरणी को दो बार पार्स करना पड़ता है।

>>> a = np.array(((3,4,5),(0,1,2))) 
>>> np.where(a==a.max()) 
(array([0]), array([2])) 

यह argmax की तुलना में, अधिकतम करने के लिए बराबर सभी तत्वों के निर्देशांक देता है। argmax उनमें से केवल एक लौटाता है (np.ones(5).argmax() रिटर्न 0)।

+5

इस सरणी में तीन बार, न केवल दो बार पुनरावृति होगी। अधिकतम समय खोजने के लिए, '==' के परिणाम बनाने के लिए दूसरी बार, और इस परिणाम से 'True' मान निकालने के लिए तीसरा बार। ध्यान दें कि अधिकतम एक से अधिक आइटम अधिकतम हो सकते हैं। –

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