如何在Julia中为For Loop的每次迭代计时?
Julia中为for循环每次迭代计时并保存结果的方法
核心方案:用@timed宏捕获单次迭代的计时信息
@time宏只会把计时结果打印到控制台,没法直接赋值给变量,但@timed宏正好解决这个问题——它会返回一个包含执行结果、耗时、内存分配量、GC时间、分配次数的元组,你可以直接捕获这个元组并提取需要的信息。
针对你的示例循环实现计时
要给每次迭代计时并把结果存到数组里,可以这么写:
# 初始化一个数组来存储每次迭代的耗时 iteration_times = Float64[] for x in 1:10 # 用@timed执行迭代内的代码,忽略不需要的返回值 _, elapsed_time, _, _, _ = @timed println("$x is my number.") # 将本次耗时添加到数组中 push!(iteration_times, elapsed_time) end # 查看结果 println("每次迭代耗时:", iteration_times)
提取更多计时细节
如果需要保存除了耗时之外的信息(比如内存分配),可以把完整的计时元组或自定义具名元组存入数组:
timing_details = [] for x in 1:10 # 捕获@timed的完整返回结果 timed_result = @timed println("$x is my number.") # 包装成具名元组,方便后续查看 push!(timing_details, ( iteration = x, time_seconds = timed_result[2], bytes_allocated = timed_result[3], gc_time = timed_result[4] )) end # 查看某一次的详细信息 println("第5次迭代详情:", timing_details[5])
补充说明
@timed返回的元组结构:(表达式返回值, 耗时(秒), 分配字节数, GC耗时(秒), 内存分配次数)- 用
_作为变量名是Julia里忽略不需要的返回值的惯例 - 如果你需要更精细的计时(比如纳秒级),可以用
time_ns()函数手动实现计时:
manual_times = Float64[] for x in 1:10 start = time_ns() println("$x is my number.") elapsed = (time_ns() - start) / 1e9 # 转换为秒 push!(manual_times, elapsed) end
内容的提问来源于stack exchange,提问作者James Rider
相关产品推荐
相关产品推荐

