रनटाइम की जाँच

Efficient Python Code लिखना

Logan Thomas

Scientific Software Technical Trainer, Enthought

हमें अपने कोड का समय क्यों नापना चाहिए?

  • हमें optimal कोडिंग तरीका चुनने देता है
  • तेज़ कोड == अधिक efficient कोड!
Efficient Python Code लिखना

हम अपने कोड का समय कैसे नापें?

  • IPython मैजिक कमांड %timeit से रनटाइम निकालें

  • Magic commands: सामान्य Python सिंटैक्स के ऊपर enhancements

    • "%" कैरेक्टर से prefixed
    • डॉक के लिए लिंक (यहाँ)
    • सभी उपलब्ध मैजिक कमांड %lsmagic से देखें
Efficient Python Code लिखना

%timeit का उपयोग

जिस कोड का समय नापना है

import numpy as np

rand_nums = np.random.rand(1000)

%timeit से टाइमिंग

%timeit rand_nums = np.random.rand(1000)
8.61 µs ± 69.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Efficient Python Code लिखना

%timeit आउटपुट

alt="मैजिक कमांड timeit का आउटपुट"

Efficient Python Code लिखना

%timeit आउटपुट

alt="मैजिक कमांड timeit आउटपुट, mean और standard deviation हाइलाइटेड"

Efficient Python Code लिखना

%timeit आउटपुट

alt="मैजिक कमांड timeit आउटपुट, runs और loops हाइलाइटेड"

Efficient Python Code लिखना

runs/loops की संख्या बताना

runs (-r) और/या loops (-n) की संख्या सेट करना

# runs की संख्या 2 रखें (-r2)
# loops की संख्या 10 रखें (-n10)

%timeit -r2 -n10 rand_nums = np.random.rand(1000)
16.9 µs ± 5.14 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)
Efficient Python Code लिखना

Line magic मोड में %timeit का उपयोग

Line magic (%timeit)

# एक पंक्ति का कोड

%timeit nums = [x for x in range(10)]
914 ns ± 7.33 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Efficient Python Code लिखना

Cell magic मोड में %timeit का उपयोग

Cell magic (%%timeit)

# कई पंक्तियों का कोड

%%timeit
nums = []
for x in range(10):
    nums.append(x)
1.17 µs ± 3.26 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
Efficient Python Code लिखना

आउटपुट सेव करना

आउटपुट को वैरिएबल में सेव करना (-o)

times = %timeit -o rand_nums = np.random.rand(1000)
8.69 µs ± 91.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
Efficient Python Code लिखना
times.timings
[8.697893059998023e-06,
 8.651204760008113e-06,
 8.634270530001232e-06,
 8.66847825998775e-06,
 8.619398139999247e-06,
 8.902550710008654e-06,
 8.633500570012985e-06]
times.best
8.619398139999247e-06
times.worst
8.902550710008654e-06
Efficient Python Code लिखना

समय की तुलना

Python डेटा स्ट्रक्चर formal नाम से बनाए जा सकते हैं

formal_list = list()
formal_dict = dict()
formal_tuple = tuple()

Python डेटा स्ट्रक्चर literal सिंटैक्स से भी बनाए जा सकते हैं

literal_list = []
literal_dict = {}
literal_tuple = ()
Efficient Python Code लिखना
f_time = %timeit -o formal_dict = dict()
145 ns ± 1.5 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
l_time = %timeit -o literal_dict = {}
93.3 ns ± 1.88 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
diff = (f_time.average - l_time.average) * (10**9)
print('l_time better than f_time by {} ns'.format(diff))
l_time better than f_time by 51.90819192857814 ns
Efficient Python Code लिखना

समय की तुलना

%timeit formal_dict = dict()
145 ns ± 1.5 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
%timeit literal_dict = {}
93.3 ns ± 1.88 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
Efficient Python Code लिखना

तैयार, शुरू!

Efficient Python Code लिखना

Preparing Video For Download...