# # numpy : la pré-allocation des tableaux est obligatoire en Python # # C'est un avantage majeur de Python sur Matlab qui permettait d'agrandir à la volée les vecteurs... # Il est donc nettement plus compliqué d'écrire du code sans pre-allocation des tableaux. # Quoique si on veut vraiment écrire un code inefficace, c'est toujours possible ! # # En Python, l'allocation à la volée reste possible avec la fonction append() de numpy # mais le langage est conçu pour que cela soit plus ardu à faire que de pré-allouer le tableau. # C'est vraiment un des aspects où Python est réellement supérieur à Matlab :-) # # Vincent Legat - 2018 # Ecole Polytechnique de Louvain # from numpy import * from timeit import default_timer as timer # # A partir de n = 500 environ, les nombres obtenus ne sont plus représentables sur l'ordinateur # et un avertissement est généré automatiquement : ces deux lignes de code permettent juste # de filtrer les messages indésirables du code :-) # import warnings warnings.filterwarnings("ignore") # ========================================================================= def tic(): global startTime startTime = timer() # ========================================================================= def toc(message = ''): global startTime stopTime = timer() if message: message = ' (' + message + ')' ; print("Elapsed time is %.6f seconds %s" % ((stopTime - startTime),message) ) startTime = 0 # ========================================================================= def fibonacci(n): f = zeros(n) f[0] = 1 f[1] = 2 for k in range(2,n): f[k] = f[k-1] + f[k-2] return f # ========================================================================= def fibonaccon(n): f = [1,2] for k in range(2,n): f = append(f,[f[k-1] + f[k-2]]) return f # ============================= mainProgram =============================== n = 200000 tic() fibonacci(n) toc('fibonacci') tic() fibonaccon(n) toc('fibonaccon') # =========================================================================