अजगर में% समय क्या है?


96

मैं हमेशा इस तरह से समय की गणना करने के लिए कोड पढ़ता हूं:

%timeit function()

क्या आप बता सकते हैं कि यहाँ "%" का क्या अर्थ है?

मुझे लगता है, "%" का उपयोग हमेशा स्ट्रिंग में कुछ बदलने के लिए किया जाता है, जैसे% s का अर्थ है स्ट्रिंग को बदलना,% d डेटा बदलना, लेकिन मुझे इस मामले के बारे में कोई पता नहीं है।


16
कि iPython से एक जादू कमांड है। देखें: iPython Magics
MrAlexBailey

जवाबों:


91

%timeitएक ipython मैजिक फंक्शन है, जिसका उपयोग कोड के एक विशेष टुकड़े (एक एकल निष्पादन विवरण, या एक एकल विधि) के समय के लिए किया जा सकता है।

डॉक्स से:

% timeit

Time execution of a Python statement or expression

Usage, in line mode:
    %timeit [-n<N> -r<R> [-t|-c] -q -p<P> -o] statement

इसका उपयोग करने के लिए, उदाहरण के लिए यदि हम यह पता लगाना चाहते हैं कि क्या उपयोग करने xrangeकी तुलना में कोई तेज़ है range, तो आप बस कर सकते हैं:

In [1]: %timeit for _ in range(1000): True
10000 loops, best of 3: 37.8 µs per loop

In [2]: %timeit for _ in xrange(1000): True
10000 loops, best of 3: 29.6 µs per loop

और आपको उनके लिए समय मिल जाएगा।

इसका प्रमुख लाभ %timeitहैं:

  • आपको मानक पुस्तकालय से आयात करने की आवश्यकता नहीं है , और बेहतर दृष्टिकोण के लिए यह पता लगाने के लिए कोड को कई बार चलाएं।timeit.timeit

  • कुल समय 2% निष्पादन विंडो के आधार पर% timeit आपके कोड के लिए आवश्यक रनों की संख्या की स्वचालित रूप से गणना करेगा।

  • आप पूरे कोड स्निपेट को पास किए बिना वर्तमान कंसोल वेरिएबल का उपयोग भी कर सकते हैं, जैसा timeit.timeitकि उस चर को बनाने के मामले में है जो किसी अन्य वातावरण में बनाया गया है जो टाइमटाइम काम करता है।


1
वहाँ एक रास्ता है समय के लिए एक मैक्रो या ipython खोल से लाइनों का एक सेट?
अल्फा_989

2
@ अल्फ़ा_989 हाँ, आप एक फंक्शन के भीतर उन पंक्तियों के सेट को लपेट सकते हैं, और फिर फंक्शन का समय जैसे:%timeit function()
mu 8

@ एमयू 無: कृपया स्पष्ट करें timer.timeit- क्या यह एक वास्तविक मॉड्यूल नाम है?
झरने के स्रोतों


आउटपुट की 10000 loops, best of 3: 29.6 µs per loopव्याख्या इस प्रकार की जा सकती है: (1.) अभिव्यक्ति को कुल समय प्राप्त करने के लिए 10000 बार चलाया जाता है (2.) तब कुल समय को 10000 से विभाजित करके "प्रति लूप" समय प्राप्त किया जाता है और (3.) कुल समय की गणना की जाती है 3 बार और अंत में (4) कुल समय में से, कुल कुल समय (उर्फ "3 का सबसे अच्छा") आउटपुट के रूप में उपयोग किया जाता है। क्या मेरी व्याख्या सही है, हाँ / नहीं?
ट्रेवर बॉयड स्मिथ

37

यह iPython में एक लाइन मैजिक के रूप में जाना जाता है । वे इस बात में अद्वितीय हैं कि उनके तर्क केवल वर्तमान रेखा के अंत तक फैले हुए हैं, और स्वयं जादूगर वास्तव में कमांड लाइन के विकास के लिए संरचित हैं। timeitकोड के निष्पादन के समय का उपयोग किया जाता है।

यदि आप उन सभी जादूगरों को देखना चाहते हैं जिन्हें आप उपयोग कर सकते हैं, तो आप बस टाइप कर सकते हैं:

%lsmagic

लाइन मैजिक और सेल मैजिक दोनों की सूची प्राप्त करना।

प्रलेखन से कुछ और जादुई जानकारी यहाँ :

IPython में कमांड की एक प्रणाली है जिसे हम जादूगर कहते हैं जिसे जो प्रभावी रूप से एक मिनी कमांड भाषा प्रदान करता है जो कि पायथन के सिंटैक्स के लिए ऑर्थोगोनल है और नए कमांड के साथ उपयोगकर्ता द्वारा एक्स्टेंसिबल है। मैजिक को अंतःक्रियात्मक रूप से टाइप किया जाता है, इसलिए वे कमांड-लाइन सम्मेलनों का उपयोग करते हैं, जैसे कि तर्क को अलग करने के लिए व्हाट्सएप का उपयोग करना, विकल्पों के लिए डैश और कमांड-लाइन वातावरण के विशिष्ट अन्य कन्वेंशन।

आप लाइन या सेल मोड में हैं इसके आधार पर , उपयोग करने के दो अलग-अलग तरीके हैं %timeit। आपका प्रश्न पहला तरीका दिखाता है:

In [1]: %timeit range(100)

बनाम

In [1]: %%timeit 
      : x = range(100)
      :

4

IPython उन लोगों को स्वीकार करता है, जिन्हें वे बिल्ट-इन मैजिक कमांड कहते हैं, यहाँ सूची है: https://ipython.org/ipython-doc/dev/interactive/magics.html

आप अपने स्वयं के कस्टम जादूगर भी बना सकते हैं, https://ipython.org/ipython-doc/dev/config/custommagics.html

आपका timeitयहाँ है https://ipython.org/ipython-doc/dev/interactive/magics.html#<-byit


2

मैं% timeit का उपयोग करने का एक और उपयोगी लाभ जोड़ने के लिए की तरह होगा जवाब देने के द्वारा म्यू無कि:

  • आप पूरे कोड स्निपेट को पास किए बिना वर्तमान कंसोल चर का उपयोग भी कर सकते हैं जैसा कि timeit.timeit के मामले में उस चर का निर्माण करने के लिए किया गया है जो एक अन्य वातावरण में बनाया गया है जो उस समय काम करता है।

पुनश्च: मुझे पता है कि यह ऊपर जवाब देने के लिए एक टिप्पणी होनी चाहिए, लेकिन मेरे पास वर्तमान में इसके लिए पर्याप्त प्रतिष्ठा नहीं है, आशा है कि मैं जो लिखता हूं वह किसी के लिए उपयोगी होगा और अगली बार टिप्पणी करने के लिए पर्याप्त प्रतिष्ठा अर्जित करने में मेरी मदद करेगा।


1
आप इसे सुधारने के लिए किसी और के उत्तर को भी संपादित कर सकते हैं। उसके लिए आपके पास पहले से ही पर्याप्त प्रतिष्ठा होनी चाहिए
टार्क वेलिंग

धन्यवाद पता नहीं था। @TarickWelling
अंकित अग्रवाल

2

मैं बस %% समय के बारे में एक बहुत ही सूक्ष्म बिंदु जोड़ना चाहता था । यह देखते हुए यह सेल पर "जादूगर" चलाता है , आपको त्रुटि मिलेगी ...

उपयोग: लाइन जादू समारोह %%timeit नहीं मिला

... यदि %% टाइमिट से ऊपर कोई कोड / टिप्पणी लाइनें हैं। दूसरे शब्दों में, सुनिश्चित करें कि %% समय आपके सेल में पहला कमांड है।

मुझे पता है कि यह एक छोटा बिंदु है जिसे सभी विशेषज्ञ दोहे कहेंगे, लेकिन युवा जादूगरों के लिए मेरा आधा प्रतिशत जोड़ना चाहते थे।


1
यह केवल एक Jupyter नोटबुक में IPython खोल में लागू नहीं है,
snakecharmerb

0

लाइन मैजिक्स % वर्ण के साथ उपसर्ग किए जाते हैं और OS कमांड-लाइन कॉल की तरह काम करते हैं: उन्हें एक तर्क के रूप में मिलता है बाकी लाइन, जहां तर्क बिना कोष्ठक या उद्धरण के पारित हो जाते हैं। सेल मैजिक्स एक डबल %% के साथ उपसर्ग कर रहे हैं, और वे ऐसे कार्य हैं जो एक तर्क के रूप में न केवल शेष पंक्ति में आते हैं, बल्कि एक अलग तर्क में इसके नीचे की रेखाएं भी हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.