2013-02-19 49 views
9

पर विचार करें निम्नलिखित NumPy सरणी के लिए संगत मानों ढूँढना:एक numpy सरणी में न्यूनतम मूल्य और उस सरणी की पंक्ति के बाकी

array([[ 1, 4], 
     [ 2, 1], 
     [ 3, 10], 
     [ 4, 8]]) 
:

a = np.array([[1,4], [2,1],(3,10),(4,8)]) 

यह एक सरणी है कि ऐसा दिखाई देता है देता है

जो मैं करने की कोशिश कर रहा हूं उसे दूसरे कॉलम का न्यूनतम मान मिल गया है (जो इस मामले में 1 है), और फिर उस जोड़ी के अन्य मूल्य की रिपोर्ट करें (इस मामले में 2)। मैंने Argmin की तरह कुछ उपयोग करने का प्रयास किया है, लेकिन यह पहले कॉलम में 1 से ऊपर हो जाता है।

क्या यह आसानी से ऐसा करने का कोई तरीका है? मैंने सरणी को सॉर्ट करने पर भी विचार किया है, लेकिन मुझे लगता है कि यह काम करने के लिए ऐसा नहीं लगता है जो जोड़े को एक साथ रखता है। डेटा, निम्नलिखित की तरह एक पाश द्वारा उत्पन्न की जा रही है वहाँ यदि ऐसा है तो यह करने के लिए एक आसान तरीका नहीं एक numpy सरणी, मैं काफ़ी होगा यह है कि एक जवाब भी रूप में:

results = np.zeros((100,2)) 

# Loop over search range, change kappa each time 
for i in range(100): 
    results[i,0] = function1(x) 
    results[i,1] = function2(y) 

उत्तर

20

कैसे के बारे में

a[np.argmin(a[:, 1]), 0] 

तोड़-डाउन

एक। दूसरा कॉलम

>>> a[:, 1] 
array([ 4, 1, 10, 8]) 

बी। दूसरे कॉलम

>>> np.argmin(a[:, 1]) 
1 

सी में न्यूनतम तत्व की अनुक्रमणिका प्राप्त करें। इंडेक्स a इसके साथ संबंधित पंक्ति

>>> a[np.argmin(a[:, 1])] 
array([2, 1]) 

डी प्राप्त करने के लिए। और पहला तत्व

>>> a[np.argmin(a[:, 1]), 0] 
2 
+3

हालांकि मेरे अपने विवेक के लिए, आप वास्तव में क्या यह मेरे लिए करता है के तर्क समझा सकता है? कार्गो-पंथ कोडिंग से बचने की कोशिश कर रहा है। – Fomite

+0

हो गया - उम्मीद है कि समझ में आता है – YXD

5

लेने का उपयोग करना np.argmin शायद सबसे अच्छा तरीका यह से निपटने के लिए है। शुद्ध अजगर में यह करने के लिए, आप इस्तेमाल कर सकते हैं:

min(tuple(r[::-1]) for r in a)[::-1]