You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中跨函数使用time.time()计时出现时间差异的问题

关于Python计时差异的问题解答

首先明确:time.time()会统计start到stop之间所有代码的执行时间,包括likelihood内部调用的rosenbrock的全部运行时间,并不是只统计likelihood函数本身的调用开销。

你看到的计时差异,大概率是以下原因导致的:

  • 单次测量的随机性:Linux系统的进程调度、CPU缓存命中情况等因素,会让短时间的单次计时结果波动很大。比如测外部计时时CPU刚好空闲、缓存命中,结果就短;测内部计时时系统有其他任务、缓存未命中,结果就长。解决方法是多次运行取平均,比如循环执行几百次计时逻辑,再计算平均耗时。

  • 计时位置的逻辑差异:检查你把计时移到rosenbrock内部时的代码——如果是把计时放在了循环内部(比如每次循环都记录时间),那得到的会是循环总耗时(3000次循环的时间总和),这自然比外部单次调用的时间大。如果是把计时放在循环前后,理论上外部计时应该略大于内部计时(多了likelihood的条件判断和函数调用的微小开销),出现相反情况的话,基本就是测量误差导致的。

  • 建议用更专业的计时工具:time.time()适合粗略计时,对于短时间的函数,推荐用Python内置的timeit模块,它会自动多次运行代码并取平均,能有效减少系统波动带来的误差。示例代码如下:

import timeit
import numpy as np

def likelihood(x, fun):
    if fun == 0:
        rosenbrock(x)
    else:
        rosenbrock_simplified(x)

def rosenbrock(x):
    logl = 0.0
    for i in range(3000):
        # 示例计算,替换成你的实际逻辑
        logl += np.sum(x) ** 2
    return logl

def time_evaluation():
    x = np.random.normal(size=2)
    # 运行1000次取平均
    total_time = timeit.timeit(lambda: likelihood(x, 0), number=1000)
    return total_time / 1000  # 返回单次运行的平均时间

print(time_evaluation())

内容的提问来源于stack exchange,提问作者Nicolò Molteni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:58:31