2012-12-08 29 views
7

तो मेरे पास इस सूची में sumErrors कहा जाता है जो 16000 पंक्तियां और 1 कॉलम है, और यह सूची पहले से ही 5 अलग-अलग क्लस्टर में रखी गई है। और मैं जो कर रहा हूं वह प्रत्येक क्लस्टर के लिए सूची को टुकड़ा कर रहा है और प्रत्येक टुकड़े में न्यूनतम मान की अनुक्रमणिका ढूंढ रहा है।सूची के उत्परिवर्तन के बिना पायथन/numpy में argmin() या min() के माध्यम से शीर्ष तीन मानों के सूचकांक ढूँढना?

हालांकि, मैं केवल argmin() का उपयोग कर पहली न्यूनतम अनुक्रमणिका पा सकता हूं। मुझे नहीं लगता कि मैं सिर्फ मूल्य को हटा सकता हूं, क्योंकि अन्यथा यह स्लाइस को बदल देगा और इंडेक्स वह है जो मुझे मूल आईडी को पुनर्प्राप्त करना है। क्या किसी को पता है कि सबसे कम तीन के लिए इंडेक्स थूकने के लिए argmin() कैसे प्राप्त करें?

या शायद एक और इष्टतम विधि? शायद मुझे केवल आईडी नंबर असाइन करना चाहिए, लेकिन मुझे लगता है कि शायद एक और सुरुचिपूर्ण विधि हो सकती है।

उत्तर

9

न्यूम्पी में argsort फ़ंक्शन शामिल है जो सभी इंडेक्स वापस कर देगा। अगर मैं आपकी आवश्यकता सही ढंग से समझ, तुम क्या करने में सक्षम होना चाहिए:

minidx = [] 
for cluster in sumErrors: 
    minidx.append(np.argsort(cluster)[:3]) 
+0

OOOOOH मैंने उस पर बहुत लंबे समय तक काम किया। मुझे पता था कि एक आसान तरीका होना चाहिए था। आपको बहुत - बहुत धन्यवाद! – Shinjitsu

1

numpy.argpartition (क्लस्टर, 3) और अधिक प्रभावी होगा।