24招加速你的Python,超级实用!

 
 

点击上方“小白学视觉”,选择加"星标"或“置顶

重磅干货,第一时间送达

云哥前期从以下九个方面讨论了加速Python的具体方法,一共24个,每个都带有优化前后的对比,非常实用。

  1. 分析代码运行时间

  2. 加速查找

  3. 加速循环

  4. 加速函数

  5. 实用标准库加速

  6. Numpy向量化加速

  7. 加速Pandas

  8. Dask加速

  9. 多线程多进程加速

我在此基础上主要美化了编辑,方便读者更容易阅读学习。

一 、分析代码运行时间


1 测算代码单次运行时间

平凡法:

b0d3ec883dca8fdc8d12710702f7a551.png

快捷法(Jupyter):

9162e786ab9afe94e9b2c18c4231315c.png

2 测算代码重复执行多次平均用时

平凡法:

a2882237c238c8cd464dfe78b89dbc2d.png

快捷法(Jupyter):

65a6fdfcf753b36d6cd042f820fbe5b6.png


3 按调用函数分析代码运行时间

平凡法:

5a28521120c5bdacd470bb7d655b4698.png

快捷法(Jupyter):

4941ccb2f1ea33b5a753fd4e8134733b.png

4 按行分析代码运行时间


平凡法:

52f6a74d72e9b6e5e8c96248e2726732.png

快捷法(Jupyter):

758857b35212d278680b1e49f3c065eb.png

二、加速你的查找


5 用set而非list进行in查找

低速法:

052a99f50f8be0197e18da701ff23e3c.png

高速法:

8616b8ee4730b86e242a3d7c63df291f.png

6 用dict而非两个list进行匹配查找

低速法:

582c1df010ce84efad9fee1d31bb366d.png

高速法:

ec6670ef0aadd170fa8c63c571677e98.png

三、加速你的循环


7 优先使用for循环而不是while循环

低速法:

536e9b6305e3f6603b2a419a010ef699.png

高速法:

fb958a1b9a0f66bba5917aaf18a40229.png

8 循环体中避免重复运算

低速法:

66b3c0532c89806bd0f50f876a9ed122.png

高速法:

9baa1ee3af70c79d5abf96285d4dbbc1.png

四、加速你的函数

9、用缓存机制加速递归函数

低速法:

c00e6388155001e3f6120a39ca57b0a2.png

高速法:

0709d71aaa00ac275cc4875014c3469f.png

10、用循环取代递归

低速法:

6d791b652548d0d8a29a26fd9366c680.png

高速法:

2c2dfb7f2f377dd095eb8f59f28ed806.png

11、 使用Numba加速Python函数

低速法:

aff9e8f1bca3a26f1669274874227cba.png

高速法:

50caddfe10d521213b4675f9b06cc3f9.png

五、使用标准库函数进行加速


12、使用collections.Counter类加速计数

低速法:

7f1f5aafa014d78081a05f44f20e9148.png

高速法:

19535bfb2d2a5846392e2365c1127898.png

13、使用collections.ChainMap加速字典合并

低速法:

cb71a7e013cef1d1f02dfb63a535b819.png

高速法:

e0b13696a01d94bbe3b3d56e62b4f3b4.png

六、使用numpy向量化进行加速


14、使用np.array代替list

低速法:

df4fe490edc7fc3fe514ed5af4cfa02b.png

高速法:

4e86a8411da9e0f8d88fe1fca18b3735.png

15、使用np.ufunc代替math.func

低速法:

9acd67b91b05a1c9897ad8eec7602aa7.png

高速法:

c501a39b2f021ad1eafa2f040d95ac0d.png

16、使用np.where代替if

低速法:

c56b0c2a7e35d8f010c45e28bf7cbbf7.png

高速法:

b7cfeedfd94235ecda3845afb4119b5c.png

七、加速你的Pandas


低速法:

f5adbb05f71f2d40a9b300fa8deb82e4.png

高速法:

9b1ddc17ea06fb12bf19490c6add9ad1.png

18、避免动态改变DataFrame的行数

低速法:

4f65660638acc0e673e83fcdb5c6186c.png

高速法:

83b782b322088ecb9fa9869c8265c242.png

19、使用csv文件读写代替xlsx文件读写

低速法:

bbd02f54b8016245a4cf77e03f417e43.png

高速法:

00c7656c143f3cac6817e7d26060f7a7.png

20、使用pandas多进程工具pandarallel

低速法:

c7254ff635964fe635e1605ed7b5e29a.png

高速法:

424ab172e7d72f21e1bc3ff3313ddb91.png

八、使用Dask进行加速


21、使用dask加速dataframe

低速法:

62b814e33c6c8bff4ad375d2295cee15.png

高速法:

59001967bf0039a63bdb13e6a57f0199.png

22、使用dask.delayed应用多进程加速

低速法:

36206abb40b3c6fe31c6733e38602481.png

高速法:

37d26f29a717578442129ad5892aa1cf.png

九、应用多线程多进程加速


23、使用多线程提升IO密集任务效率

低速法:

dac90ea082c4356a3cbeb09570a1667d.png

高速法:

ffb07f7e6d014c65ac9d6caaea47020d.png

24、使用多进程提升CPU密集任务效率

低速法:

c0270836ac16a5e7ee9ffcf762421f12.png

高速法:

18ebcf866571acbf04e070557ef74027.png

好消息!

小白学视觉知识星球

开始面向外开放啦👇👇👇

 
 

16be4dca1e1b8d63d064afc51b98a561.jpeg

下载1:OpenCV-Contrib扩展模块中文版教程

在「小白学视觉」公众号后台回复:扩展模块中文教程,即可下载全网第一份OpenCV扩展模块教程中文版,涵盖扩展模块安装、SFM算法、立体视觉、目标跟踪、生物视觉、超分辨率处理等二十多章内容。


下载2:Python视觉实战项目52讲
在「小白学视觉」公众号后台回复:Python视觉实战项目,即可下载包括图像分割、口罩检测、车道线检测、车辆计数、添加眼线、车牌识别、字符识别、情绪检测、文本内容提取、面部识别等31个视觉实战项目,助力快速学校计算机视觉。


下载3:OpenCV实战项目20讲
在「小白学视觉」公众号后台回复:OpenCV实战项目20讲,即可下载含有20个基于OpenCV实现20个实战项目,实现OpenCV学习进阶。


交流群

欢迎加入公众号读者群一起和同行交流,目前有SLAM、三维视觉、传感器、自动驾驶、计算摄影、检测、分割、识别、医学影像、GAN、算法竞赛等微信群(以后会逐渐细分),请扫描下面微信号加群,备注:”昵称+学校/公司+研究方向“,例如:”张三 + 上海交大 + 视觉SLAM“。请按照格式备注,否则不予通过。添加成功后会根据研究方向邀请进入相关微信群。请勿在群内发送广告,否则会请出群,谢谢理解~
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值