Chapter2 2
Chapter2 2
Logan Thomas
Senior Data Scientist, Protection
Engineering Consultants
Why should we time our code?
Allows us to pick the optimal coding approach
import numpy as np
rand_nums = np.random.rand(1000)
8.61 µs ± 69.1 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
16.9 µs ± 5.14 µs per loop (mean ± std. dev. of 2 runs, 10 loops each)
914 ns ± 7.33 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%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)
8.69 µs ± 91.4 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
[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
formal_list = list()
formal_dict = dict()
formal_tuple = tuple()
literal_list = []
literal_dict = {}
literal_tuple = ()
145 ns ± 1.5 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
93.3 ns ± 1.88 ns per loop (mean ± std. dev. of 7 runs, 10000000 loops each)
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)
Logan Thomas
Senior Data Scientist, Protection
Engineering Consultants
Code pro ling
Detailed stats on frequency and duration of function calls
Line-by-line analyses
hero_data = {}
return hero_data
1.09 µs ± 11 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
1.08 µs ± 6.42 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%%timeit
hero_data = {}
for i,hero in enumerate(heroes):
hero_data[hero] = (new_hts[i], new_wts[i])
634 ns ± 9.29 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)
%load_ext line_profiler
%lprun -f
%load_ext line_profiler
%lprun -f convert_units
%load_ext line_profiler
Logan Thomas
Senior Data Scientist, Protection
Engineering Consultants
Quick and dirty approach
import sys
nums_list = [*range(1000)]
sys.getsizeof(nums_list)
9112
import numpy as np
nums_np = np.array(range(1000))
sys.getsizeof(nums_np)
8096
Line-by-line analyses
%load_ext memory_profiler
%load_ext memory_profiler