2013-11-21 6 views
5

मेरे पास एन-आयामी मैट्रिक्स है जिसमें एन पैरामीटर वाले फ़ंक्शन के मान हैं। प्रत्येक पैरामीटर में मूल्यों की एक अलग संख्या होती है। मुझे सभी पैरामीटर पर फ़ंक्शन को अधिकतम करने की आवश्यकता है, लेकिन एक, जिसके परिणामस्वरूप गैर-अधिकतम पैरामीटर के मानों की संख्या के बराबर आकार का एक आयामी वेक्टर होता है। मुझे यह भी सहेजने की ज़रूरत है कि अन्य मानकों द्वारा कौन से मूल्यों को लिया जाता है।धुरी पर numpy.argmax तत्वों के सूचकांक प्राप्त करें

तो मैं iteratively विभिन्न कुल्हाड़ियों से अधिक numpy.max लागू करने के लिए मैं क्या जरूरत है खोजने के लिए मैट्रिक्स के आयामी स्वरूप को कम करना चाहता था ऐसा करने के लिए। अंतिम वेक्टर तब मेरे द्वारा छोड़े गए पैरामीटर पर निर्भर करेगा।

मुझे अंतिम तत्वों के मूल सूचकांक खोजने में परेशानी हो रही है (जिसमें अन्य मानकों द्वारा उठाए गए मूल्यों के बारे में जानकारी शामिल है)। मैं numpy.argmax का उपयोग numpy.max जैसा ही करता हूं लेकिन मैं मूल सूचकांक वापस नहीं प्राप्त कर सकता हूं।

मैं क्या कोशिश कर रहा हूँ का एक उदाहरण है:

x = [[[1,2],[0,1]],[[3,4],[6,7]]] 
args = np.argmax(x, 0) 

यह रिटर्न

[[1 1] 
[1 1]] 

जिसका मतलब है कि argmax तत्वों (2,1,4,7) मूल के भीतर चुन रही है, मैट्रिक्स। लेकिन उनके सूचकांक कैसे प्राप्त करें? मैट्रिक्स x के लिए सीधे इंडेक्स के रूप में args का उपयोग करके unravel_index का उपयोग करके, सफलतापूर्वक बिना किसी सफलता के सूचकांक से कार्यों का एक समूह।

numpy.where का उपयोग एक समाधान नहीं है क्योंकि इनपुट मैट्रिक्स के बराबर मूल्य हो सकते हैं, इसलिए मैं अलग-अलग मूल मानों से नहीं समझ पाऊंगा।

उत्तर

6

x.argmax(0) अधिकतम अक्ष के लिए प्रथम अक्ष के साथ इंडेक्स देता है। अन्य अक्ष के सूचकांक उत्पन्न करने के लिए np.indices का उपयोग करें।

x = np.array([[[1,2],[0,1]],[[3,4],[6,7]]]) 
x.argmax(0) 
    array([[1, 1], 
      [1, 1]]) 
a1, a2 = np.indices((2,2)) 
(x.argmax(0),a1,a2) 
    (array([[1, 1], 
      [1, 1]]), 
    array([[0, 0], 
      [1, 1]]), 
    array([[0, 1], 
      [0, 1]])) 


x[x.argmax(0),a1,a2] 
    array([[3, 4], 
      [6, 7]]) 

x[a1,x.argmax(1),a2] 
    array([[1, 2], 
      [6, 7]]) 

x[a1,a2,x.argmax(2)] 
    array([[2, 1], 
      [4, 7]]) 

तो x अन्य आयाम हैं, a1 उत्पन्न, और a2 उचित रूप से।

आधिकारिक दस्तावेज argmax का उपयोग करने के तरीके के बारे में बहुत कुछ नहीं कहता है, लेकिन पहले एसओ धागे ने इस पर चर्चा की है। मुझे यह सामान्य विचार Using numpy.argmax() on multidimensional arrays

से मिला
संबंधित मुद्दे