2015-12-31 3 views
6

में एक सरणी में एक से अधिक Maximas का मूल्य प्राप्त करने के लिए मैं एक सरणीकैसे अजगर

a =[0, 0, 15, 17, 16, 17, 16, 12, 18, 18] 

मुझे लगता है कि max गणना तत्व मूल्य खोजने की कोशिश कर रहा हूँ है। और यदि कोई टाई है, तो मुझे उन सभी तत्वों को चाहिए जो max गिनती हैं।

आप दो 0, दो 16, दो 17, दो 18 एक 15 और एक 12 तो मैं कुछ है कि वापसी होगी [0, 16, 17, 18] (आदेश नहीं महत्वपूर्ण चाहती हैं, लेकिन मैं 15 या 12 नहीं चाहते हैं देख सकते हैं)

मैं कर रहा था np.argmax(np.bincount(a)) लेकिन argmax केवल इसके प्रलेखन प्रति एक तत्व देता है() तो मैं केवल 1 है जो 0

मैं np.argpartition(values, -4)[-4:] कि काम करता है की कोशिश की है मिलता है, लेकिन व्यवहार में मुझे पता नहीं होता कि वहां 4 तत्व हैं जिनकी संख्या समान संख्या है! (शायद मैं पास यहाँ हूँ !!! प्रकाश बल्ब सिर्फ पर चला गया !!!)

+0

'collections.Counter' पर एक नजर डालें, तो यह आप के लिए सामान में गिना जाता है, तो बस अधिकतम गिनती खोजने के लिए और सभी को पुन: प्राप्त करने के लिए है उस गिनती के साथ चाबियाँ। –

उत्तर

0

यह थोड़ा बारीकियों है, लेकिन आप Counter और itemgetter का उपयोग कर इस लक्ष्य को हासिल कर सकते हैं:

from collections import Counter 
from operator import itemgetter 

a =[0, 0, 15, 17, 16, 17, 16, 12, 18, 18] 
counter_list = Counter(a).most_common() 
max_occurrences = max(counter_list, key=itemgetter(1))[1] 
answer = [item[0] for item in counter_list if item[1] == max_occurrences] 
print(answer) 

आउटपुट

[0, 16, 17, 18] 
8

आप np.unique उपयोग कर सकते हैं तो तत्वों जिसका गिनती अधिकतम के बराबर है खींच मायने रखता है और अद्वितीय तत्वों की एक सरणी प्राप्त करने के लिए:

012,
import numpy as np 

a = np.array([0, 0, 15, 17, 16, 17, 16, 12, 18, 18]) 

un, cnt = np.unique(a, return_counts=True) 

print(un[cnt == cnt.max()]) 
[ 0 16 17 18] 

संयुक्त राष्ट्र अद्वितीय तत्व हैं, cnt प्रत्येक की आवृत्ति/गिनती है:

In [11]: a = np.array([0, 0, 15, 17, 16, 17, 16, 12, 18, 18]) 

In [12]: un, cnt = np.unique(a, return_counts=True) 

In [13]: un, cnt 
Out[13]: (array([ 0, 12, 15, 16, 17, 18]), array([2, 1, 1, 2, 2, 2])) 

cnt == cnt.max() हमें मुखौटा तत्वों को अधिकतम करने के लिए बराबर हैं खींचने के लिए दे देंगे:

In [14]: cnt == cnt.max() 
Out[14]: array([ True, False, False, True, True, True], dtype=bool) 
+1

ध्यान दें कि पुराने संस्करणों के लिए 'वापसी_उंट = ट्रू' काम करता है, पुराने संस्करणों के लिए आप 'np.bincount (ए) [un]' – Kasramvd

+0

का उपयोग कर सकते हैं जैसा कि उपरोक्त सुझाव दिया गया है, कसम्राम द्वारा नोट के साथ काम किया गया है, जो 1.9 से अधिक पुरानी संख्या के लिए आयात करता है एनपी ए = एनपी.एरे ([0, 0, 15, 17, 16, 17, 16, 12, 18, 18]) un = np.unique (ए) cnt = np.bincount (ए) [un ] प्रिंट (un [cnt == cnt.max()]) – Roland

+0

@ पैड्राइक आपका समाधान नम्पी 1.9 से "केवल काम करेगा", पुराने संस्करणों में यह त्रुटि फेंकता है – kmario23

0

यहाँ एक साफ समाधान है:

from collections import Counter 
import numpy as np 

a = np.array([0, 0, 15, 17, 16, 17, 16, 12, 18, 18]) 
freq_count = Counter(a) 
high = max(freq_count.values()) 
res = [key for key in freq_count.keys() if freq_count[key]==high] 

कहां tput: [0 16 17 18]

नोट: आउटपुट आदेश इसकी गारंटी नहीं