Last active
July 31, 2018 15:23
Revisions
-
davidak revised this gist
Jul 31, 2018 . 1 changed file with 27 additions and 25 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,34 +1,36 @@ # Execution time in seconds ## original list with 11 items jpp: 0.038900841027498245 Laurent H.: 0.09572448302060366 Kevin: 0.007683080970309675 davidak: 0.027118309983052313 ## list with 100 items jpp: 0.085919318953529 Laurent H.: 0.8218901020009071 Kevin: 0.007853235001675785 davidak: 0.046300466055981815 ## list with 1000 items jpp: 0.2682207649340853 Laurent H.: 5.869488948956132 Kevin: 0.008967073052190244 davidak: 0.26018757303245366 ## list with 10000 items jpp: 2.4661101199453697 Laurent H.: 62.00245025800541 Kevin: 0.009241680963896215 davidak: 2.5198689920362085 ## list with 100000 items jpp: 24.208682479104027 Laurent H.: 680.6267002499662 Kevin: 0.009258356061764061 davidak: 26.868416464072652 -
davidak revised this gist
Jul 31, 2018 . 3 changed files with 82 additions and 18 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +0,0 @@ This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,34 @@ # original list with 11 items jpp: 0.038900841027498245 Laurent H.: 0.09572448302060366 Kevin: 0.007683080970309675 davidak: 0.027118309983052313 # list with 100 items jpp: 0.085919318953529 Laurent H.: 0.8218901020009071 Kevin: 0.007853235001675785 davidak: 0.046300466055981815 # list with 1000 items jpp: 0.2682207649340853 Laurent H.: 5.869488948956132 Kevin: 0.008967073052190244 davidak: 0.26018757303245366 # list with 10000 items jpp: 2.4661101199453697 Laurent H.: 62.00245025800541 Kevin: 0.009241680963896215 davidak: 2.5198689920362085 # list with 100000 items jpp: 24.208682479104027 Laurent H.: 680.6267002499662 Kevin: 0.009258356061764061 davidak: 26.868416464072652 This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,12 +1,14 @@ #!/usr/bin/env python3 import numpy as np import matplotlib matplotlib.use('AGG') import matplotlib.pyplot as plt import copy import timeit iterations = 10000 def invert_edge_values_jpp(l): @@ -63,14 +65,46 @@ def invert_edge_values_davidak(l): if __name__ == '__main__': # create long random list of booleans # with some False on the edges l = [] list_items = 100000 number_pre_false = np.random.randint(5) number_past_false = np.random.randint(5) number_random_bool = list_items - (number_pre_false + number_past_false) for i in range(number_pre_false): l.append(False) for i in range(number_random_bool): l.append(np.random.rand() > 0.5) for i in range(number_past_false): l.append(False) # l = [False, False, False, True, True, True, False, False, True, False, False] # list_items = len(l) jpp = timeit.timeit("invert_edge_values_jpp(l)", number=iterations, globals=globals()) laurent_h = timeit.timeit("invert_edge_values_laurent_h(l)", number=iterations, globals=globals()) kevin = timeit.timeit("invert_edge_values_kevin(l)", number=iterations, globals=globals()) davidak = timeit.timeit("invert_edge_values_davidak(l)", number=iterations, globals=globals()) print("jpp:", jpp) print("Laurent H.:", laurent_h) print("Kevin:", kevin) print("davidak:", davidak) dpi = 96 fig = plt.figure(num=None, figsize=(1024/dpi, 768/dpi), dpi=dpi) ax = fig.add_subplot(111) plt.title("Comparison of functions to invert edge values in python boolean list (with {} items)".format(list_items)) ax.set_ylabel('execution time of {} iterations in seconds'.format(iterations)) x = ['jpp', 'Laurent H.', 'Kevin', 'davidak'] y = [jpp, laurent_h, kevin, davidak] ax.bar(x, y) plt.savefig("test.svg") -
davidak revised this gist
Jul 31, 2018 . 2 changed files with 15 additions and 9 deletions.There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -1,4 +1,4 @@ jpp: 3.6361226870212704 Laurent H.: 10.126299427938648 Kevin: 0.786450024927035 davidak: 2.6573368250392377 This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -4,7 +4,6 @@ import copy import timeit l = [False, False, False, True, True, True, False, False, True, False, False] k = [True, True, True, True, True, True, False, False, True, True, True] number = 1000000 @@ -18,7 +17,7 @@ def invert_edge_values_jpp(l): l[:idx1] = True l[len(l)-idx2:] = True return l def invert_edge_values_laurent_h(l): @@ -35,7 +34,7 @@ def invert_edge_values_laurent_h(l): if v == tempList[-1]: l[i] = not v else: break return l def invert_edge_values_kevin(l): @@ -49,7 +48,7 @@ def invert_edge_values_kevin(l): break l[i] = True return l def invert_edge_values_davidak(l): @@ -60,10 +59,17 @@ def invert_edge_values_davidak(l): l[:first] = True l[last + 1:] = True return l if __name__ == '__main__': # test functions np.testing.assert_array_equal(invert_edge_values_jpp(l), np.array(k)) np.testing.assert_array_equal(np.array(invert_edge_values_laurent_h(l)), np.array(k)) np.testing.assert_array_equal(np.array(invert_edge_values_kevin(l)), np.array(k)) np.testing.assert_array_equal(invert_edge_values_davidak(l), np.array(k)) # measure execution print("jpp:", timeit.timeit("invert_edge_values_jpp(l)", number=number, globals=globals())) print("Laurent H.:", timeit.timeit("invert_edge_values_laurent_h(l)", number=number, globals=globals())) print("Kevin:", timeit.timeit("invert_edge_values_kevin(l)", number=number, globals=globals())) -
davidak created this gist
Jul 31, 2018 .There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,4 @@ jpp: 46.10399893007707 Laurent H.: 52.31541666598059 Kevin: 41.856350317946635 davidak: 43.6837813219754 This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,70 @@ #!/usr/bin/env python3 import numpy as np import copy import timeit l = [False, False, False, True, True, True, False, False, True, False, False] k = [True, True, True, True, True, True, False, False, True, True, True] number = 1000000 def invert_edge_values_jpp(l): idx1 = next(i for i, j in enumerate(l) if j) idx2 = next(i for i, j in enumerate(l[::-1]) if j) l = np.array(l) l[:idx1] = True l[len(l)-idx2:] = True np.testing.assert_array_equal(l, np.array(k)) def invert_edge_values_laurent_h(l): l = copy.deepcopy(l) tempList = l[:] # Iterate from the beginning (and invert) until the element differs from the first one for i,v in enumerate(tempList): if v == tempList[0]: l[i] = not v else: break # Iterate from the end (and invert) until the element differs from the last one for i,v in reversed(list(enumerate(tempList))): if v == tempList[-1]: l[i] = not v else: break np.testing.assert_array_equal(np.array(l), np.array(k)) def invert_edge_values_kevin(l): for i in range(len(l)): if l[i]: break l[i] = True for i in range(len(l)-1, -1, -1): if l[i]: break l[i] = True np.testing.assert_array_equal(np.array(l), np.array(k)) def invert_edge_values_davidak(l): l = np.array(l) ind = np.where(l)[0] first, last = ind[0], ind[-1] l[:first] = True l[last + 1:] = True np.testing.assert_array_equal(l, np.array(k)) if __name__ == '__main__': print("jpp:", timeit.timeit("invert_edge_values_jpp(l)", number=number, globals=globals())) print("Laurent H.:", timeit.timeit("invert_edge_values_laurent_h(l)", number=number, globals=globals())) print("Kevin:", timeit.timeit("invert_edge_values_kevin(l)", number=number, globals=globals())) print("davidak:", timeit.timeit("invert_edge_values_davidak(l)", number=number, globals=globals()))