Eu sempre leio o código para calcular o tempo desta forma:
%timeit function()
Você pode explicar o que significa "%" aqui?
Acho que o "%" sempre é usado para substituir algo em uma string, como% s significa substituir uma string,% d substituir um dado, mas não tenho ideia sobre este caso.
Respostas:
%timeit
é uma função mágica do ipython , que pode ser usada para cronometrar uma parte específica do código (uma única instrução de execução ou um único método).Dos documentos:
Para usá-lo, por exemplo, se quisermos descobrir se usar
xrange
é mais rápido do que usarrange
, você pode simplesmente fazer:In [1]: %timeit for _ in range(1000): True 10000 loops, best of 3: 37.8 µs per loop In [2]: %timeit for _ in xrange(1000): True 10000 loops, best of 3: 29.6 µs per loop
E você obterá os horários para eles.
As principais vantagens
%timeit
são:que você não precisa importar
timeit.timeit
da biblioteca padrão e executar o código várias vezes para descobrir qual é a melhor abordagem.% timeit calculará automaticamente o número de execuções necessárias para seu código com base em uma janela de execução de 2 segundos no total.
Você também pode fazer uso das variáveis de console atuais sem passar o trecho de código inteiro, como no caso de
timeit.timeit
construir a variável que é construída em outro ambiente em que o timeit funciona.fonte
%timeit function()
timer.timeit
- esse é um nome de módulo real?10000 loops, best of 3: 29.6 µs per loop
pode ser interpretada como: (1.) a expressão é executada 10.000 vezes para obter o tempo total (2.) então o tempo total é dividido por 10.000 para obter o tempo "por loop" e (3.) o cálculo do tempo total é feito 3 vezes e finalmente (4) do total de 3 vezes, o tempo total mínimo (também conhecido como "melhor de 3") é usado como saída. minha interpretação está correta, sim / não?Isso é conhecido como mágica de linha no iPython. Eles são únicos no sentido de que seus argumentos se estendem apenas até o final da linha atual, e as próprias magias são realmente estruturadas para o desenvolvimento de linha de comando.
timeit
é usado para cronometrar a execução do código.Se você quiser ver todas as magias que pode usar, basta digitar:
para obter uma lista de magias de linha e magia celular.
Mais algumas informações mágicas da documentação aqui :
Dependendo se você está no modo linha ou célula , existem duas maneiras diferentes de usar
%timeit
. Sua pergunta ilustra a primeira maneira:In [1]: %timeit range(100)
vs.
In [1]: %%timeit : x = range(100) :
fonte
O IPython os intercepta, são chamados de comandos mágicos integrados, aqui está a lista: https://ipython.org/ipython-doc/dev/interactive/magics.html
Você também pode criar seus próprios mágicos personalizados, https://ipython.org/ipython-doc/dev/config/custommagics.html
Você
timeit
está aqui https://ipython.org/ipython-doc/dev/interactive/magics.html#magic-timeitfonte
Eu só queria acrescentar um ponto muito sutil sobre %% timeit. Dado que executa a "magia" no celular , você obterá erro ...
UsageError: Função mágica de linha
%%timeit
não encontrada... se houver alguma linha de código / comentário acima de %% timeit. Em outras palavras, certifique-se de que %% timeit seja o primeiro comando em sua célula.
Eu sei que é um pequeno ponto que todos os especialistas dirão duh, mas eu só queria adicionar meu meio centavo para os jovens bruxos que estão começando com truques de mágica.
fonte
Eu gostaria apenas de adicionar outra vantagem útil de usar% timeit para responder por mu 無que:
PS: Eu sei que este deve ser um comentário a ser respondido acima, mas atualmente não tenho reputação suficiente para isso, espero que o que escrevo seja útil para alguém e me ajude a ganhar reputação suficiente para comentar na próxima vez.
fonte
Magias de linha são prefixadas com o caractere % e funcionam muito como chamadas de linha de comando do sistema operacional: elas obtêm como argumento o resto da linha, onde os argumentos são passados sem parênteses ou aspas. Cell magics são prefixados com %% duplo , e são funções que obtêm como argumento não apenas o resto da linha, mas também as linhas abaixo dela em um argumento separado.
fonte