गैर-सपाट सूचकांकों को लौटाने वाली सुव्यवस्थित सरणी का अरग्मैक्स


99

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

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

मेरी समस्या यह है कि जब मैं बहुआयामी सूचकांक चाहता हूं तो फ्लैट इंडेक्स का उपयोग numpy.argmaxकरता axis=Noneहै।

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

जवाबों:



21
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) देता है ।


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

1

अधिकतम मूल्य की सभी घटनाओं के गैर-समतल सूचकांक प्राप्त करने के लिए, आप यूमिरो के उत्तर को थोड़ा-सा संशोधित कर सकते argwhereहैं where:

np.argwhere(a==a.max())

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

यह प्रभावी नहीं है क्योंकि आप तीन पास और एक मैट्रिक्स निर्माण प्राप्त करते हैं। कल्पना कीजिए कि हम 9000x7000 छवि (A3 @ 600dpi) प्राप्त कर चुके हैं - क्या आप अभी भी अपने समाधान पर जोर देंगे?
मैक्सीम गेनेंको
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.