web-dev-qa-db-fra.com

Mesurer le temps d'exécution d'une cellule de code Jupyter Notebook

Il semble que dans Spyder (IPython3 Kernel), on peut facilement chronométrer une cellule de code en exécutant la commande %%time Ou %%timeit En haut de la cellule de code:

#%%
%%time # or %%timeit which measures average runtime from multiple runs
....

#%% (the previous cell ends and the next begins)

L'exécution du code ci-dessus peut obtenir le temps d'exécution de la cellule définie par la paire de #%%. C'est ainsi que les choses fonctionnent dans Spyder, mais ne fonctionnent pas tout à fait dans l'environnement Jupyter Notebook.

Dans le code Jupyter, les cellules ne sont pas définies par des délimiteurs #%%, Elles sont plutôt créées en cliquant sur un bouton dans la barre de menus. Et pour autant que j'ai essayé, les commandes %%time Et %%timeit Soulèvent toutes les deux une erreur de compilation. Il semble que Jupyter ne puisse pas les reconnaître, mais c'est étrange car mon Jupyter utilise en fait le même noyau IPython que Spyder. Une chose qui fonctionne dans Jupyter est les commandes %time Et %timeit, Mais elles ne peuvent mesurer que l'exécution d'un code sur une ligne, c'est-à-dire qu'elles doivent être formulées comme

%time blah blah

et il s'avère que je ne peux même pas mesurer une boucle for qui se compose de plusieurs lignes. Cette méthode n'est donc pas souhaitable pour moi. Existe-t-il un moyen d'évaluer un runtime de cellule à l'aide de la commande magique %time(it) et similaires dans Jupyter?

(PS: si, comme dans Spyder, j'attache une commande %time En haut d'une cellule, elle donnera Wall time: 0 ns Car il n'y a rien à la suite dans cette même ligne et il ne mesure en fait rien.)

5
Vim

Cela dépend de la façon dont vous souhaitez utiliser les informations de temps ...

Si vous voulez simplement savoir combien de temps une cellule a pris pour s'exécuter à votre connaissance, alors l'extension de bloc-notes ExecuteTime ( https://github.com/ipython-contrib/jupyter_contrib_nbextensions/tree/7672d429957aaefe9f2e71b15e3b78ebb9ba96d1/src_jj nbextensions/execute_time ) est une bonne solution car elle fournit automatiquement des informations de temps pour toutes les cellules de code, ce qui signifie une maintenance réduite du code car vous n'avez pas à ajouter de code de synchronisation partout. Il écrit également le dernier horodatage exécuté, ce qui est utile si vous utilisez le bloc-notes comme journal de bord scientifique.

Cependant, si vous souhaitez utiliser les informations de temps par programme, vous devrez ajouter du code pour capturer les informations de temps dans une variable. Selon cette réponse ( Obtenez l'heure d'exécution d'un bloc de code en Python 2.7 ), vous pouvez utiliser le module timeit:

import timeit
start_time = timeit.default_timer()
# code you want to evaluate
elapsed = timeit.default_timer() - start_time

De toute évidence, ce n'est pas aussi bien que d'utiliser la magie cellulaire, mais cela devrait faire le travail.

Quant à savoir comment/si vous pouvez atteindre ce dernier en utilisant la magie cellulaire, je ne sais pas.

8
Biggsy

Veuillez mettre %% time au tout début de la cellule avant même tout commentaire. Cela a fonctionné pour moi.

3