![640?wx_fmt=jpeg](https://i-blog.csdnimg.cn/blog_migrate/e029ca64669ef39eb3eadcc98ff62098.jpeg)
作者 | 梁云1991
来源 Python与算法之美
一、分析代码运行时间
第1式,测算代码运行时间
平凡方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/21ed662432b943cd6bd190f322d032db.png)
快捷方法(jupyter环境)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/dde647c4fbe0ff93d07221a38d922444.png)
第2式,测算代码多次运行平均时间
平凡方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/75705619218d5470d051c930845b0356.png)
快捷方法(jupyter环境)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/0e276c3f6894d6525383b6b354547ccf.png)
第3式,按调用函数分析代码运行时间
平凡方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/1089e10b6a5b225b87b323439f943b64.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/647e2061e2982e3cb3cca671ac3ae95b.jpeg)
快捷方法(jupyter环境)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/661e36ca7d8e0f7327fbe6126bc05fd0.jpeg)
第4式,按行分析代码运行时间
平凡方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/781aa98ae58bd5dd958c5f96a336397c.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c3ce4d34262c79b797f051a81edf69e7.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/54cdb83f26423713c7135b8a8a0d22ff.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/12764b2aecfa4b97f8ee87e697a51eaa.jpeg)
快捷方法(jupyter环境)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c4844f923af37edc3f5806c8c9f938ea.png)
二、加速你的查找
第5式,用set而非list进行查找
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/1ec1100c4bab3d66d45fb55b712c94dd.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/3181e85975cb27007ca45b18993ffd0b.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c28803328dcb00617df02f0c65ab1080.png)
第6式,用dict而非两个list进行匹配查找
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/77b474868c4e87997cb46846a9acbb3a.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2b42c77e7cc911c1071eb710d6d10293.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/cb30ba226509445e12e7220339ba8f74.png)
三、加速你的循环
第7式,优先使用for循环而不是while循环
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/ba180fc9586b3bc12f58e30ad10244f4.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/388b1d5aa10408def728b232711e94dc.png)
第8式,在循环体中避免重复计算
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/e4ab4f6e6cdfa08fae949bcbf12cd054.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/8941b700b915184f576499c1ed561d50.png)
四、加速你的函数
第9式,用循环机制代替递归函数
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/33feaa6d332019febec3e6327d44f059.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/9c743caa7057084a39fd939c3fd0f293.png)
第10式,用缓存机制加速递归函数
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/fee130079ffb200be8215d64fdb8ade1.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/ede4d50386cbeca116e630783939079c.png)
第11式,用numba加速Python函数
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/69d31e19a20353926578381ffd8be08a.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/6b021f9cc3f6ac66339c84bea9bd9ecf.png)
五、使用标准库函数进行加速
第12式,使用collections.Counter加速计数
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/d676d60cba1319b9d2737ded8c1f76f0.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2be0e327706a90533ae29f8ff2e5367d.png)
第13式,使用collections.ChainMap加速字典合并
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/7d46831260e77e586ae3c2e622196381.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/01e99a9aeb4ce1bbb98a9c8604705c1a.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/831b0faab6d3ef10dfb1115bb4271e54.png)
六、使用高阶函数进行加速
第14式,使用map代替推导式进行加速
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/a4a67ab405d038c2e00306590f941587.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/4d55acaec2eb4ed7664186554d18bb97.png)
第15式,使用filter代替推导式进行加速
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/c813654aee96dbe37cfda8d300622439.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/cdb8d119914c591f92c69186cd8c3de8.png)
七、使用numpy向量化进行加速
第16式,使用np.array代替list
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/27ed3736c0c8dfee58bf2948a9535cda.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/5151713fcc6a724a38d3c639cf1f21f8.png)
第17式,使用np.ufunc代替math.func
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/7bd159481852918ef91722ea27807a57.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/cfd43c690b2d1129f2133accae0461e5.png)
第18式,使用np.where代替if
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/acc5447127cac42a124092f0d67d5af7.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/e96869c928227d015b99a20220c018ac.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/fcee61f4f08466d290293a75990671b7.png)
八、加速你的Pandas
第19式,使用csv文件读写代替excel文件读写
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/205fc8dd10beb2cf9e98aed6e21529a0.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/12abc5fcb7361a8c1ea90d3bf86f1f23.png)
第20式,使用pandas多进程工具pandarallel
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/25a4bf421d8c8e630d48bb8d23a6a283.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/22bdf558dd05b089527bdffca1e75bc4.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/728501a0fff6c867c15d21bb4b9edbec.png)
九、使用Dask进行加速
第21式,使用dask加速dataframe
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/e2eb122fd8658f1dd2232adb8b558972.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/fb74272acd1feb8f6c8d16373c949431.png)
第22式,使用dask.delayed进行加速
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/881baa50e1dcc4b891647a9ee99d77e1.png)
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/a6e4b1cc8299e7f93f4dd6c0afe043aa.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/9d1d257f6e0aa7e759d248780ec333ab.png)
十、应用多线程多进程加速
第23式,应用多线程加速IO密集型任务
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/83cd0749c18e5b8d775aca18049ed1c1.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/4fad858020ee6d7c7a387cf99f2ddc5d.jpeg)
第24式,应用多进程加速CPU密集型任务
低速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/1786daa90aca3bb59ad8c2d8e2cb4037.png)
高速方法
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/f267ab6c0adb4f9f5b932455c3fd4c0e.jpeg)
(*本文为 AI科技大本营转载文章,转
载请
联系原作者)
◆
精彩推荐
◆
2019 中国大数据技术大会(BDTC)历经十一载,再度火热来袭!
豪华主席阵容及百位技术专家齐聚,15 场精选专题技术和行业论坛,超强干货+技术剖析+行业实践立体解读,深入解析热门技术在行业中的实践落地。
【早鸟票】
与
【特惠学生票】
限时抢购,扫码了解详情!
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/cd54b2a130aef37d401639b05f5046df.jpeg)
推荐阅读
快手王华彦:端上视觉技术的极致效率及其短视频应用实践 | AI ProCon 2019
中文预训练ALBERT模型来了:小模型登顶GLUE,Base版模型小10倍、速度快1倍
100多次竞赛后,他研发了一个几乎可以解决所有机器学习问题的框架
NLP被英语统治?打破成见,英语不应是「自然语言」同义词
TensorFlow2.0正式版发布,极简安装TF2.0(CPU&GPU)教程
肖仰华:知识图谱构建的三要素、三原则和九大策略 | AI ProCon 2019
AI落地遭“卡脖子”困境:为什么说联邦学习是解决良方?
限时早鸟票 | 2019 中国大数据技术大会(BDTC)超豪华盛宴抢先看!
![640?wx_fmt=png](https://i-blog.csdnimg.cn/blog_migrate/2cba20d74577dec51dc9daf89a6a59e5.png)
你点的每个“在看”,我都认真当成了喜欢