Il est bien connu que Jupyter / IPython peut mesurer le temps d'exécution avec % time
et% timeit
, mais avez-vous déjà voulu traiter ou visualiser cela?
Vous pouvez utiliser %% capture
pour traiter la sortie standard comme un objet Python.
Faisons-le réellement.
%%capture result
%timeit 2 ** 100
L'argument de %% capture
est le nom de l'objet, voir l'aide pour d'autres options.
%capture [--no-stderr] [--no-stdout] [--no-display] [output]
run the cell, capturing stdout, stderr, and IPython's rich display() calls.
positional arguments:
output The name of the variable in which to store output. This is a utils.io.CapturedIO
object with stdout/err attributes for the text of the captured output.
CapturedOutput also has a show() method for displaying the output, and __call__ as
well, so you can use that to quickly display the output. If unspecified, captured
output is discarded.
Si vous regardez l'attribut stdout
, vous pouvez voir que la sortie standard est stockée dans la chaîne.
print(result.stdout)
292 ns +- 4.24 ns per loop (mean +- std. dev. of 7 runs, 1000000 loops each)
Convertissons cette partie 292 ns
en secondes afin qu'elle puisse être traitée comme une valeur numérique.
value, unit = result.stdout.split()[:2]
float(value) * {"s": 1, "ms": 1e-3, "us": 1e-6, "ns": 1e-9}[unit]
2.92e-07
Non limité à % timeit
, vous pouvez utiliser %% capture
pour traiter diverses sorties de Jupyter. Bonne vie à Jupyter!