Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 9, 2016 17:41:27

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

время выполнения функции

Реализовал функцию сортировки и нужно вычислить время ее выполнения как это сделать помогите пожалуйста

Офлайн

#2 Апрель 9, 2016 17:50:29

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

время выполнения функции

Гуглите модуль timeit, у меня в блоге можно на русском почитать



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#3 Апрель 9, 2016 21:23:46

Qwerty16
Зарегистрирован: 2016-03-20
Сообщения: 38
Репутация: +  -1  -
Профиль   Отправить e-mail  

время выполнения функции

import timeit
def cs1(a):
    h = 0
    u = 0
    c = 0
    g = 0
    j = 0
    d = 0
    for k in range(len(a)-1, 0, -1):
        f = False
        h += 1
        for i in range(k, 0, -1):
            j += 1
            if a[i] < a[i-1]:
                a[i], a[i-1] = a[i-1], a[i]
                c += 1
                f = True
        d += 1
        for i in range(k):
            u += 1
            if a[i] > a[i+1]:
                a[i], a[i+1] = a[i+1], a[i]
                g += 1
                f = True
      
        if not f:
            return a,h,u,c,g,j,d
print(timeit.timeit("cs1(a)", setup="from __main__ import cs1", number=1))

показивает ошибку
Traceback (most recent call last):
File “CUsers/Богдан/Desktop/azzz.py”, line 28, in <module>
print(timeit.timeit(“cs1(a)”, setup=“from __main__ import cs1”, number=1))
File “C:\Users\Богдан\AppData\Local\Programs\Python\Python35-32\lib\timeit.py”, line 213, in timeit
return Timer(stmt, setup, timer, globals).timeit(number)
File “C:\Users\Богдан\AppData\Local\Programs\Python\Python35-32\lib\timeit.py”, line 178, in timeit
timing = self.inner(it, self.timer)
File “<timeit-src>”, line 6, in inner
NameError: name ‘a’ is not defined

Офлайн

#4 Апрель 9, 2016 21:29:15

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

время выполнения функции

cs1(a)
Наверное в функцию нужно что-то передать?

Офлайн

#5 Апрель 9, 2016 23:52:37

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

время выполнения функции

Qwerty16
Реализовал функцию сортировки и нужно вычислить время ее выполнения
Модуль timeit не вычисляет время, он даёт возможность сравнить время и найти более быстрый и более медленный вариант.
Можно запускать его прямо из командной строки.
[guest@localhost ~]$ python3 -m timeit -s "def f(n): return n ** 3" "f(10)"
1000000 loops, best of 3: 0.568 usec per loop
[guest@localhost ~]$

Можно и симпортировать что-нибудь из какого-нибудь скрипта и запустить timeit снаружи
[guest@localhost py]$ cat t.py 
#!/usr/bin/env python3

def cs1(a):
h = 0
u = 0
c = 0
g = 0
j = 0
d = 0
for k in range(len(a)-1, 0, -1):
f = False
h += 1
for i in range(k, 0, -1):
j += 1
if a[i] < a[i-1]:
a[i], a[i-1] = a[i-1], a[i]
c += 1
f = True
d += 1
for i in range(k):
u += 1
if a[i] > a[i+1]:
a[i], a[i+1] = a[i+1], a[i]
g += 1
f = True

if not f:
return a,h,u,c,g,j,d
[guest@localhost py]$
[guest@localhost py]$ python3 -m timeit -s "from t import cs1 as f" "f([1, 2, 3])"
100000 loops, best of 3: 4.5 usec per loop
[guest@localhost py]$

Но можно и специальный скрипт для разных замеров сделать
#!/usr/bin/env python3
 
import timeit
 
 
def f1():
    pass
 
def f2():
    pass
 
 
def main():
    t1 = timeit.Timer('f1()', 'from __main__ import f1')
    t2 = timeit.Timer('f2()', 'from __main__ import f2')
 
    for t in t1, t2:
        print(t.repeat(3, 10000))
 
if __name__ == '__main__':
    main()
Здесь нужно просто импортировать нужную функцию из нужного модуля и вставить её вызов в f1() и в f2() с разными параметрами, а потом вызвать скрипт, как любой другой.

t.py
#!/usr/bin/env python3
 
def cs1(a):
    h = 0
    u = 0
    c = 0
    g = 0
    j = 0
    d = 0
    for k in range(len(a)-1, 0, -1):
        f = False
        h += 1
        for i in range(k, 0, -1):
            j += 1
            if a[i] < a[i-1]:
                a[i], a[i-1] = a[i-1], a[i]
                c += 1
                f = True
        d += 1
        for i in range(k):
            u += 1
            if a[i] > a[i+1]:
                a[i], a[i+1] = a[i+1], a[i]
                g += 1
                f = True
      
        if not f:
            return a,h,u,c,g,j,d

timecmp.py
#!/usr/bin/env python3
 
import timeit
import t
 
def f1():
    t.cs1([1, 2, 3] * 3)
 
def f2():
    t.cs1([1, 2, 3] * 5)
 
def main():
    t1 = timeit.Timer('f1()', 'from __main__ import f1')
    t2 = timeit.Timer('f2()', 'from __main__ import f2')
 
    for t in t1, t2:
        print(t.repeat(3, 10000))
 
if __name__ == '__main__':
    main()

[guest@localhost py]$ ./timecmp.py 
[0.23246537600016381, 0.22988142500025788, 0.2342479890003233]
[0.49446545399996467, 0.48956154899997273, 0.4928233850000652]
[guest@localhost py]$



Отредактировано py.user.next (Апрель 10, 2016 00:04:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version