%autosave 60
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
%timeit 3 + 5
%timeit 3 / 5
%%timeit a = np.random.rand(1000)
a /= a.max()
np.sum(a)
# import cProfile
from time import perf_counter_ns
from functools import wraps
def my_timeit(f):
n = 1000
@wraps(f)
def timed_f(*args, **kwargs):
t1 = perf_counter_ns()
for _ in range(n):
return_value = f(*args, **kwargs)
dt = perf_counter_ns() - t1
print(f'Execution time is {dt / n} ns')
return return_value
return timed_f
@my_timeit
def integrate(f, a, b, n):
"""Очень плохая функция"""
x, dx = np.linspace(a, b, n, retstep=True, endpoint=False)
s = 0
for x_ in x:
s += f(x_)
return s * dx
integrate(lambda x: x**2, 0, 1, 1000)
%%timeit
for i in range(100_000_000):
pass
%%timeit
li = []
for i in range(1000):
li.append(i)
%timeit li = [i for i in range(1000)]
%timeit li = list(range(1000))
%%timeit
li = []
for i in range(1000):
li.append(i**3)
%timeit li = [i**3 for i in range(1000)]
%%timeit
def double(x):
return 2 * x
for i in range(1_000_000):
double(i)
%%timeit
for i in range(1_000_000):
2 * i
%timeit [2 * i for i in range(1_000_000)]
n = 10
a = np.random.rand(n)
li = a.tolist()
%timeit [x + 1 for x in a]
%timeit [x + 1 for x in li]
%timeit a + 1
%timeit np.array(li) + 1
import math as m
%timeit m.sin(1)
%timeit np.sin(1)
from functools import reduce
from operator import add
n = 10_000
a = np.random.rand(n)
li = a.tolist()
%timeit sum(li)
%timeit np.sum(li)
%timeit np.sum(a)
%timeit reduce(lambda s, x: s + x, li)
%timeit reduce(add, li)
%%timeit li = np.random.rand(n).tolist()
s = 0
for x in li:
s += x
from base64 import b64encode
def random_str(n=64):
return b64encode(np.random.bytes(64)).decode()
li = [random_str() for _ in range(3)]
# print(f'{li[0]}\n{li[1]}\n{li[2]}')
s = li[0]
for x in li[1:]:
s += f'\n{x}'
print(s)
%%timeit li = [random_str() for _ in range(1000)]
s = li[0]
for x in li[1:]:
s += f'\n{x}'
%timeit reduce(add, li) # не тот результат
%timeit reduce(lambda s, x: f'{s}\n{x}', li)
%timeit '\n'.join(li)
import numba
def golden_ratio(n):
s = 1.0
for _ in range(n):
s = 1.0 + 1.0 / s
return s
@numba.jit
def golden_ratio_numba(n):
s = 1
for _ in range(n):
s = 1 + 1 / s
return s
%timeit golden_ratio(1_000_000)
golden_ratio_numba(1)
%timeit golden_ratio_numba(1_000_000)
def cont_frac(a):
s = a[-1]
for x in a[-2::-1]:
s = x + 1.0 / s
return s
cont_frac_numba = numba.jit(cont_frac, nopython=True)
a = np.ones(1000)
%timeit cont_frac(a)
%timeit cont_frac_numba(a)