numpy.interp
बहुत सुविधाजनक और अपेक्षाकृत तेज़ है। कुछ संदर्भों में मैं अपने आउटपुट की तुलना गैर-इंटरपोलेटेड वेरिएंट के विरुद्ध करना चाहता हूं जहां स्पैस मान प्रचारित होते हैं ("डेंसर" आउटपुट में) और परिणाम स्पैस इनपुट के बीच टुकड़े की स्थिरता होती है। जो फ़ंक्शन मैं चाहता हूं उसे "स्पैस -> घने" कनवर्टर भी कहा जा सकता है जो नवीनतम स्पैस मूल्य की प्रतिलिपि बनाता है जब तक कि उसे बाद का मूल्य न मिले (एक प्रकार का शून्य इंटरपोलेशन जैसे कि शून्य समय/दूरी पहले के मान से कभी समाप्त हो गई हो)।अगर मैं शून्य इंटरपोलेशन (टुकड़े की स्थिरता) चाहता हूं तो numpy.interp के लिए सबसे अच्छा ड्रॉप-इन प्रतिस्थापन क्या है?
दुर्भाग्यवश, numpy.interp
के लिए स्रोत को ट्विक करना आसान नहीं है क्योंकि यह केवल संकलित फ़ंक्शन के आसपास एक रैपर है। मैं इसे पाइथन लूप का उपयोग करके खुद लिख सकता हूं, लेकिन समस्या को हल करने के लिए सी-स्पीड तरीका ढूंढने की उम्मीद है।
अद्यतन: नीचे (kind='zero'
साथ scipy.interpolate.interp1d
) समाधान काफी धीमी है और (लंबाई कि 50% आबादी वाले है में जैसे इनपुट 500k) प्रति कॉल 10 सेकंड से अधिक लेता है। यह शून्य-ऑर्डर स्पलाइन का उपयोग करके kind='zero'
लागू करता है और spleval
पर कॉल बहुत धीमी है। हालांकि, kind='linear'
(यानी डिफ़ॉल्ट इंटरपोलेशन) के लिए स्रोत कोड सीधे numpy का उपयोग कर समस्या को हल करने के लिए एक उत्कृष्ट टेम्पलेट देता है (न्यूनतम परिवर्तन slope=0
सेट करना है)। वह कोड दिखाता है कि समस्या को हल करने के लिए numpy.searchsorted
का उपयोग कैसे करें और रनटाइम numpy.interp
पर कॉल करने के समान है, इसलिए समस्या को हल करने के लिए scipy.interpolate.interp1d
रैखिक इंटरपोलेशन के कार्यान्वयन को हल करके हल किया जाता है (ढलान! = 0 आसन्न मूल्यों को मिश्रित करता है)।
बस अपडेट के लिए धन्यवाद कहना चाहता था - मैं 'spyy' के लिए पूरी निर्भरता के बिना' numpy' के साथ एक शून्य इंटरपोलेशन चाहता था, और आपके पोस्ट अपडेट ने इसे करने का तरीका बताया। मैंने एक छोटे से परीक्षण में किया है, 'numpy' 1.5.1: '_fitpack.so' के साथ 0.8.0' scipy' स्थापित किया है मेरा परीक्षण 308 से 508 μs में करता है; जबकि 'numpy'- केवल 'slope = 0' के साथ हैक किया गया रैखिक 491 से 778 μs में समान होता है - इसलिए मेरे लिए यह धीमा है; लेकिन इतना नहीं! धन्यवाद फिर से - चीयर्स! – sdaau