
使用 time.perf_counter() 可实现纳秒级精度的单调计时,专为测量短时间间隔设计,避免了 time.time() 的系统时钟漂移和低分辨率问题。
使用 `time.perf_counter()` 可实现纳秒级精度的单调计时,专为测量短时间间隔设计,避免了 `time.time()` 的系统时钟漂移和低分辨率问题。
在科学计算、算法性能分析(如牛顿法收敛速度评估)等场景中,若待测操作本身极快(常为微秒甚至纳秒量级),使用 time.time() 会导致大量“0.0000000000”输出——因其典型分辨率仅约 1–15 毫秒(取决于操作系统和硬件),远不足以捕捉单次牛顿迭代的耗时。
✅ 正确做法:改用 time.perf_counter()
该函数返回一个高分辨率、单调递增的时钟值(单位:秒,实际精度可达纳秒级),专为性能测量而设计,不受系统时间调整影响,是 Python 官方推荐的“测量经过时间”的首选工具。
? 修改你的代码如下(关键改动已加注释):
import time
def f(x):
return x**2 - 4
def fderiv(x):
return 2 * x
def Newton(x):
return x - f(x) / fderiv(x)
zero = 2.0
for n in range(-100, 100):
start_val = zero + n / 100.0
current = start_val
difference = abs(current - zero)
# ✅ 使用 perf_counter 替代 time.time()
start_time = time.perf_counter()
try:
while difference > 1e-5: # 建议用科学计数法提升可读性
current = Newton(current)
difference = abs(current - zero)
# ✅ 精确获取经过时间(自动具备最高可用精度)
elapsed = time.perf_counter() - start_time
print(f"{start_val:.2f}: elapsed time is {elapsed:.9f} s")
except (ZeroDivisionError, OverflowError):
print(f"{start_val:.2f}: Error")
? 补充建议:
调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。
-
避免
time.process_time():它只统计 CPU 时间,忽略等待(如 I/O),但牛顿法纯计算,看似可行;然而其在多线程/子进程下行为复杂,且不保证跨平台高精度,perf_counter更通用可靠。 -
慎用
time.time_ns():虽返回纳秒整数,但底层仍依赖系统时钟,可能有抖动或非单调性;perf_counter()在内部已做优化,更稳健。 -
多次运行取最小值:单次测量易受系统噪声干扰。如需更高置信度,可对同一输入重复执行 3–5 次,取
min(elapsed_times)—— 因为最小值最接近真实计算开销(排除上下文切换等干扰)。
? 总结:time.perf_counter() 是 Python 中测量微小时间间隔的黄金标准。替换后,你将清晰看到不同初值下牛顿法收敛的细微耗时差异,为算法分析提供真实、可靠的数据基础。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










