एक अक्ष में एक अधिकतम सरणी में अधिकतम तत्व का सूचकांक कैसे प्राप्त करें


118

मैं एक 2 आयामी NumPy सरणी है। मुझे पता है कि कुल्हाड़ियों पर अधिकतम मूल्य कैसे प्राप्त करें:

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

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

जवाबों:


142
>>> a.argmax(axis=0)

array([1, 1, 0])

1
यह पूर्णांक के लिए ठीक काम करता है, लेकिन मैं फ्लोट मान और 0 और 1 के बीच की संख्याओं के लिए क्या कर सकता हूं
Priyom saha

100
>>> 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

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

36

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 निर्देशांक की सूची में परिवर्तित कर सकते हैं:

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

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

तुम ठीक कह रहे हो, परमाणु! इस बात के लिए धन्यवाद। मैंने उचित सशर्त के लिए दूसरे बराबरी के चिन्ह को शामिल करने के लिए उस कथन को तय किया है।
सेवकप्राइम

@SevakPrime, के .max()बजाय @ atomh33ls द्वारा इंगित की गई दूसरी त्रुटि थी .argmax()। कृपया उत्तर को संपादित करें
gg349

@ gg349, यह इस बात पर निर्भर करता है कि आप क्या चाहते हैं। argmax इसे एक अक्ष के साथ प्रदान करता है जो ऐसा प्रतीत होता है कि ओपी चाहता है कि इसे यूमिरो द्वारा उस उत्तर को अनुमोदित किया जाए।
सेवकप्रेम

मुझे लगता है कि सुधार @ atomh33ls और मैं प्रस्ताव सरणी के सबसे बड़े तत्व (ओं) की ओर जाता है, जबकि ओपी एक निश्चित अक्ष के साथ सबसे बड़े तत्वों के बारे में पूछ रहा था। हालांकि सूचना है कि आपके वर्तमान समाधान की ओर जाता है x_y_coord = [(0, 2), (1, 1)]कि @eumiro उत्तर से मेल नहीं खाता है, और गलत है। उदाहरण के लिए, a = array([[7,8,9],[10,11,12]])यह देखने की कोशिश करें कि आपके कोड में इस इनपुट पर कोई हिट नहीं है। आप यह भी उल्लेख करते हैं कि यह तुलना में बेहतर काम करता है unravel, लेकिन @blas द्वारा पोस्ट किया गया समाधान निरपेक्ष अधिकतम की समस्या का उत्तर देता है, एक अक्ष के साथ नहीं।
gg349

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.