लघु जवाब: शायद argrelextrema
अपने कार्य के लिए इतनी छूट नहीं होगा। अपनी जरूरतों को पूरा करने के अपने स्वयं के कार्य लिखने पर विचार करें।
लंबे समय तक जवाब: आप argrelextrema
उपयोग करने के लिए बाध्य कर रहे हैं? यदि हां, तो आप comparator
और order
argrelextrema
के तर्कों के साथ खेल सकते हैं (reference देखें)।
अपने आसान उदाहरण के लिए, np.greater_equal
comparator
के रूप में चुनना पर्याप्त होगा।
>>> data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 1, 0 ])
>>> print(argrelextrema(data, np.greater_equal,order=1))
(array([2, 6, 7]),)
नोट हालांकि इस तरह से
>>> data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 4, 1, 0 ])
>>> print(argrelextrema(data, np.greater_equal,order=1))
(array([2, 6, 8]),)
अलग ढंग से व्यवहार करती है कि कि आप शायद चाहते हैं, पहले 3
और 4
मॅक्सिमा के रूप में पाने के, के बाद से argrelextrema
अब एक अधिकतम है कि अधिक से अधिक या है के रूप में सब कुछ देखता है अपने दो निकटतम पड़ोसियों के बराबर। अब आप order
तर्क का उपयोग यह तय करने के लिए कर सकते हैं कि इस तुलना में कितने पड़ोसियों को पकड़ना चाहिए - order=2
चुनने से मेरा ऊपरी उदाहरण बदल जाएगा केवल अधिकतम 4
को।
>>> print(argrelextrema(data, np.greater_equal,order=2))
(array([2, 8]),)
नहीं है, तथापि, यह करने के लिए एक नकारात्मक पक्ष यह है - चलो डेटा एक बार फिर बदलने के लिए:
>>> data = np.array([ 0, 1, 2, 1, 0, 1, 3, 3, 4, 1, 5 ])
>>> print(argrelextrema(data, np.greater_equal,order=2))
(array([ 2, 10]),)
एक और शिखर के रूप में एक अंतिम मान 4
पर अपने शिखर खोजने से आप रहता है जोड़ा जा रहा है, के रूप में argrelextrema
है अब 4
से अधिक दूसरा पड़ोसी देख रहा है (जो शोर डेटा के लिए उपयोगी हो सकता है, लेकिन सभी मामलों में अपेक्षित व्यवहार की आवश्यकता नहीं है)।
argrelextrema
का उपयोग करना, आप हमेशा पड़ोसियों की एक निश्चित संख्या के बीच द्विआधारी संचालन तक ही सीमित रहेगा। नोट, हालांकि, सभी argrelextrema
उपरोक्त आपके उदाहरण में कर रहे हैं n
, data[n] > data[n-1] and data[n] > data[n+1]
पर वापस लौटना है। आप इसे आसानी से कार्यान्वित कर सकते हैं, और फिर नियमों को परिशोधित कर सकते हैं, उदाहरण के लिए दूसरे पड़ोसी की जांच करके यदि पहले पड़ोसी के पास समान मूल्य है।
पूर्णता के लिए के लिए, वहाँ scipy.signal
में एक अधिक विस्तृत समारोह, find_peaks_cwt
हो रहा है। हालांकि मुझे इसका उपयोग करने का कोई अनुभव नहीं है और इसलिए आप इसके बारे में अधिक जानकारी नहीं दे सकते हैं।
अन्य शीर्ष पहचान एल्गोरिदम के लिए, आप https: // github भी देख सकते हैं।com/monsieurV/py-findpeaks 'argrelextrema' वास्तव में आसान विकल्प नहीं है जब आप एल्गोरिदम व्यवहार के साथ टिंकर करना चाहते हैं। –