मैं अपने उत्तर को तीन भागों में तोड़ने जा रहा हूँ। प्रोफाइलिंग, सी के माध्यम से अजगर कोड को गति देना, और अजगर के माध्यम से अजगर को गति देना। यह मेरा विचार है कि पायथन के पास अपने कोड के प्रदर्शन को वास्तविक बोतल गर्दन के लिए नीचे ड्रिलिंग करने के लिए देखने के लिए कुछ सर्वोत्तम उपकरण हैं। प्रोफाइलिंग के बिना कोड को गति देना एक uzi के साथ हिरण को मारने की कोशिश करने जैसा है।
यदि आप वास्तव में केवल मैट- वीसी उत्पादों में रुचि रखते हैं, तो मैं scipy.sparse की सिफारिश करूंगा ।
प्रोफाइलिंग के लिए पायथन उपकरण
प्रोफ़ाइल और cProfile मॉड्यूल : ये मॉड्यूल आपको अपने मानक रन टाइम विश्लेषण और फ़ंक्शन कॉल स्टैक देंगे। उनके आँकड़ों को सहेजना बहुत अच्छा है और pstats मॉड्यूल का उपयोग करके आप डेटा को कई तरीकों से देख सकते हैं।
kernitable : यह उपकरण लाइन कोड टाइमिंग द्वारा लाइन जैसे काम करने के लिए कई रूटीनों को एक साथ रखता है
memory_profiler : यह टूल आपके कोड की लाइन मेमोरी फुट प्रिंट द्वारा लाइन का उत्पादन करता है।
IPython टाइमर :timeit
फंक्शन एक त्वरित इंटरैक्टिव तरीके से कार्यों में अंतर देखने के लिए काफी अच्छा है।
पायथन को गति दे रहा है
Cython : cython अजगर में कुछ कार्यों लेने के लिए और तेजी से कोड प्राप्त करने के तेज़ तरीका है। आप अजगर के साइथन संस्करण के साथ फ़ंक्शन को सजा सकते हैं और यह सी कोड उत्पन्न करता है। यह बहुत मुख्य है और सी / सी ++ / फोरट्रान में आसानी से लिखे गए अन्य हाथ से लिंक भी कर सकता है। यह आज तक पसंदीदा उपकरण है।
ctypes : ctypes आपको अपने कार्यों को c में लिखने की अनुमति देगा और फिर कोड की अपनी सरल सजावट के साथ उन्हें जल्दी से लपेट देगा। यह PyObjects से कास्टिंग के सभी दर्द को संभालता है और c को फ़ंक्शन को कॉल करने के लिए gil को प्रबंधित करता है।
C में अपना कोड लिखने के लिए अन्य दृष्टिकोण मौजूद हैं, लेकिन वे C / C ++ लाइब्रेरी को लेने और इसे पायथन में लपेटने के लिए कुछ हद तक अधिक हैं।
पायथन-केवल दृष्टिकोण
यदि आप ज्यादातर पायथन के अंदर रहना चाहते हैं, तो मेरी सलाह है कि आप अपने एल्गोरिदम को लागू करने के लिए सही डेटा प्रकारों का उपयोग कर रहे हैं। यह मेरा अनुभव रहा है कि आप आमतौर पर अपने डेटा संरचनाओं को अनुकूलित करके बहुत दूर हो जाएंगे, फिर किसी भी निम्न स्तर के सी हैक। उदाहरण के लिए:
सुन्न : सरणियों के तार संचालन के लिए एक आकस्मिक सरणी बहुत तेज़ है
numexpr : a numpy array अभिव्यक्ति optimizer। यह मल्टीप्रीज़िंग एफ़पीई एक्सप्रेशन के लिए अनुमति देता है और कई टेम्पोररी से भी छुटकारा दिलाता है, जो कि पाइथन शेप्टर के प्रतिबंधों के कारण खस्ता हो जाता है।
ब्लिस्टर : किसी सूची का बी-ट्री कार्यान्वयन, किसी सूची के आंतरिक नोड्स को सम्मिलित करने, अनुक्रमित करने और स्थानांतरित करने के लिए बहुत तेज़
पांडा : डेटा फ़्रेम (या टेबल) सरणियों पर बहुत तेज़ विश्लेषिकी।
pytables : तेजी से संरचित श्रेणीबद्ध तालिकाओं (जैसे एचडीएफ 5), विशेष रूप से बड़े आंकड़ों के लिए मुख्य गणना और प्रश्नों से बाहर के लिए अच्छा है।