numpy - Understanding axis in Python -


मैंने numpy.apply_along_axis का उपयोग करके कुछ कोड देखे हैं और मुझे हमेशा कोड का परीक्षण करना है यह देखने के लिए कि यह कैसे काम करता है, मैं अभी तक पायथन में अक्ष विचार नहीं समझ पाया।

उदाहरण के लिए, मैंने संदर्भ से सरल कोड का परीक्षण किया।

मैं देख सकता हूं कि पहले मामले के लिए मैट्रिक्स की प्रत्येक पंक्ति का पहला कॉलम लिया गया था, और दूसरे मामले में, पंक्ति को ही माना जाता है।

इसलिए मैं यह परीक्षण करने के लिए एक उदाहरण बनाऊँगा कि यह कैसे मैट्रिक्स की एक सरणी के साथ काम करता है (समस्या जो मुझे इस अक्ष प्रश्न पर ले गई), जिसे 3 डी मैट्रिक्स के रूप में देखा जा सकता है, जहां प्रत्येक पंक्ति मैट्रिक्स है, ठीक है?

  a = [ [[1,2,3], [2,3,4]], [[4,5,6], [9, 9 7,7]] आयातित आंकड़े = numpy.array ([बी के लिए बी में ]) Def my_func (a): रिटर्न (a [0] + a [-1]) * 0.5 b = numpy.apply_along_axis (my_func, 0, डेटा) b = numpy.apply_along_axis (my_func, 1, डेटा)  

मुझे दिया गया है:

  सरणी ([[2.5, 3.5, 4.5], [5.5, 5.5, 5.5]]  

और:

  सरणी ([1.5, 2.5, 3.5], [6.5, 6.5, 6.5] ])  

पहला परिणाम के लिए मुझे उम्मीद है कि मुझे क्या मिला। लेकिन दूसरे के लिए, मुझे यद्यपि प्राप्त होता है:

  सरणी ([[2., 3.], [5., 8.]])  

फिर भी मुझे लगता है कि शायद यह एक axis = 2 होना चाहिए और मुझे इसका परिणाम पिछले परिणाम मिला। तो, मैं सोच रहा हूं कि यह कैसे ठीक से काम करता है।

धन्यवाद।

सबसे पहले, डेटा = सरणी (ए) पहले से ही पर्याप्त है, डेटा = numpy.array ([a ख के लिए a])

डेटा अब और 3 डी सरणी आकार के साथ (2,2,3) है, और 3 अक्षों 0 , 1, 2 । पहली अक्ष में 2 की लंबाई है, दूसरा 2 और तीसरा है।

इसलिए दोनों numpy.apply_along_axis (my_func, 0, डेटा) और numpy। Apply_along_axis (my_func, 1, डेटा) परिणामस्वरूप (2,3) 2d सरणी होगा। दोनों मामलों में आकार (2,3) है, शेष अक्षों का, 2 और 3 या 1 और 3 का।

और numpy.apply_along_axis (my_func, 2, डेटा) , (2,2) आकार सरणी आपको दिखाया गया है, जहां (2,2) है पहले अक्षरों के पहले 2 अक्षों का आकार, जैसा कि आप लागू होते हैं 3 अक्षों के साथ।

इसे समझने का तरीका जो भी अक्ष है, आप apply_along हो आपके my_func के आकार में 'ढह गई' है, जो इस मामले में एक एकल मान देता है शेष अक्ष का क्रम और आकार अपरिवर्तित रहेगा।

इसके बारे में सोचने का वैकल्पिक तरीका यह है कि: apply_along एक अक्ष का मतलब है कि अक्ष पर शेष मूल्यों के प्रत्येक संयोजन के लिए उस अक्ष के मूल्यों पर कार्य लागू करें। परिणाम प्राप्त करें, और उन्हें शेष धुरी के आकार में वापस व्यवस्थित करें इसलिए, यदि my_func 4 मानों के ट्यूपल देता है, वापसी (([0] + एक [-1]) * 0.5,1,1, 1) , हम numpy.apply_along_axis (my_func, 0, डेटा) की उम्मीद करेंगे .shape होना (4,2,3)


Comments