【Python性能优化】取最值的差异

 
 
 
 
 
 
 
 

测试

测试内容:从一组 x, y, z 坐标值中获得每个维度(x、y、z)的值域范围。此处不考虑将数据临时存放到内存,再整组获取值域的操作(因为对单文件这么做问题不大,不太会有超级大的 obj 文件,但是对某个目录及其子目录下所有 obj 数据获取一个跨文件的值域范围时,很容易撑爆内存),如果只是对一个单 obj 文件统计值域则建议使用内存来换运算时间,但是这个测试点只是我的处理流程中一个原子函数,所以不考虑内存换时间的操作

 

最终结果:使用 if 判断比每次都尝试更新要快 ~20%
测试环境:python 3.11、win 11、debian 11(docker)

 

两个测试案例如下

  1. 使用 if 去判断大小,再更新值域
  2. 对每个 x, y, z 都尝试去更新值域
def bench_v1(obj_file):
    x_min, y_min, z_min, x_max, y_max, z_max = float("inf"), float("inf"), float("inf"), float("-inf"), float(
        "-inf"), float("-inf")
    with open(obj_file, "r", encoding="utf-8") as f:
        while row := f.readline():
            if row.startswith("v "):
                row = row.strip()
                _, x, y, z, *_ = row.split()
                x, y, z = float(x), float(y), float(z)
                if x < x_min:
                    x_min = x
                if x > x_max:
                    x_max = x
                if y < y_min:
                    y_min = y
                if y > y_max:
                    y_max = y
                if z < z_min:
                    z_min = z
                if z > z_max:
                    z_max = z
def bench_v2(obj_file):
    x_min, y_min, z_min, x_max, y_max, z_max = float("inf"), float("inf"), float("inf"), float("-inf"), float(
        "-inf"), float("-inf")
    with open(obj_file, "r", encoding="utf-8") as f:
        while row := f.readline():
            if row.startswith("v "):
                row = row.strip()
                _, x, y, z, *_ = row.split()
                x, y, z = float(x), float(y), float(z)
                x_min = min(x_min, x)
                x_max = max(x_max, x)
                y_min = min(y_min, y)
                y_max = max(y_max, y)
                z_min = min(z_min, z)
                z_max = max(z_max, z)

 
 
 
 

Windows 测试结果

在这里插入图片描述

 
 
 
 

Linux 测试结果

Linux 为 docker 版 python:3.11.9-bullseye

在这里插入图片描述

  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值