tc,toc在Python中的模拟功能

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (74)

什么是MATLAB、tic和toc函数的最佳模拟?

提问于
用户回答回答于

除了timeit正如ThiefMaster提到的,一个简单的方法就是(在导入之后)time)):

t = time.time()
# do stuff
elapsed = time.time() - t

我有一个我喜欢使用的助手类:

class Timer(object):
    def __init__(self, name=None):
        self.name = name

    def __enter__(self):
        self.tstart = time.time()

    def __exit__(self, type, value, traceback):
        if self.name:
            print '[%s]' % self.name,
        print 'Elapsed: %s' % (time.time() - self.tstart)

它可以用作上下文管理器:

with Timer('foo_stuff'):
   # do some foo
   # do some stuff

有时我觉得这种技术比timeit-这完全取决于你想要测量什么。

用户回答回答于

当我从Matlab迁移到python时,我也有同样的问题。在这个线程的帮助下,我能够构造一个精确性Matlab模拟tic()toc()职能。只需在脚本顶部插入以下代码即可。

import time

def TicTocGenerator():
    # Generator that returns time differences
    ti = 0           # initial time
    tf = time.time() # final time
    while True:
        ti = tf
        tf = time.time()
        yield tf-ti # returns the time difference

TicToc = TicTocGenerator() # create an instance of the TicTocGen generator

# This will be the main function through which we define both tic() and toc()
def toc(tempBool=True):
    # Prints the time difference yielded by generator instance TicToc
    tempTimeInterval = next(TicToc)
    if tempBool:
        print( "Elapsed time: %f seconds.\n" %tempTimeInterval )

def tic():
    # Records a time in TicToc, marks the beginning of a time interval
    toc(False)

就这样!现在我们准备充分利用tic()toc()就像在Matlab中一样。例如

tic()

time.sleep(5)

toc() # returns "Elapsed time: 5.00 seconds."

实际上,这比内置的Matlab函数更通用.。在这里,您可以创建另一个TicTocGenerator跟踪多个操作,或者只是对事情进行不同的时间安排。例如,在对脚本进行计时时,我们现在可以对脚本的每个部分以及整个脚本进行单独的计时。(我将提供一个具体的例子)

TicToc2 = TicTocGenerator() # create another instance of the TicTocGen generator

def toc2(tempBool=True):
    # Prints the time difference yielded by generator instance TicToc2
    tempTimeInterval = next(TicToc2)
    if tempBool:
    print( "Elapsed time 2: %f seconds.\n" %tempTimeInterval )

def tic2():
    # Records a time in TicToc2, marks the beginning of a time interval
    toc2(False)

现在,您应该能够对两件事情进行计时:在下面的示例中,我们将整个脚本和脚本的各个部分分开计时。

tic()

time.sleep(5)

tic2()

time.sleep(3)

toc2() # returns "Elapsed time 2: 5.00 seconds."

toc() # returns "Elapsed time: 8.00 seconds."

实际上,你甚至不需要使用tic()每次都是。如果您有一系列要计时的命令,则可以编写

tic()

time.sleep(1)

toc() # returns "Elapsed time: 1.00 seconds."

time.sleep(2)

toc() # returns "Elapsed time: 2.00 seconds."

time.sleep(3)

toc() # returns "Elapsed time: 3.00 seconds."

# and so on...

我希望这是有帮助的。

扫码关注云+社区

领取腾讯云代金券