24 式加速你的 Python

一,分析代码运行时间

第1式,测算代码运行时间


平凡方法

bf470878-34fd-4ec3-b36a-c6dc4906bf48.png


快捷方法(jupyter环境)

5b877586-6ef6-4111-b1e0-a7582eb517cb.png


第2式,测算代码多次运行平均时间


平凡方法

ecd7c767-b505-4425-95bf-f99615d691cb.png


快捷方法(jupyter环境)

9fb377ab-2af2-4451-a9e9-fe19a7c2a93a.png


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


平凡方法

ba0a8fcc-480a-4875-995e-faf97884d492.png

4137f51f-a888-4b6a-9613-1e1ca9858602.png


快捷方法(jupyter环境)

ddefd407-c29e-4df1-adc8-6aa8a327d50d.png


第4式,按行分析代码运行时间


平凡方法

0d17de62-418d-42a6-9951-57c1b63c7bd5.png

ed0b12a4-f3f4-4d0e-8c52-a990aa8a9e15.png

fded25bb-b55f-41a1-b372-62b77734247c.png

44ef9c53-f1f3-4641-a66e-735a133981af.png


快捷方法(jupyter环境)

ca603805-9056-4f8b-bb50-f0a7d0fd44fe.png

二,加速你的查找

第5式,用set而非list进行查找

低速方法

f19c79f9-e49a-48eb-8d52-fe8ce934e3ea.png

b64b27ea-8341-4239-b9fa-ab0bd4cf5a76.png


高速方法

394f0b69-9171-4208-bf9a-c5ed0651b35f.png


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


低速方法

79cbf525-4e8d-4dbe-b7d0-77026285f5f6.png

fcd13c54-4fc7-4cf4-9b2d-2fa48f3c05f6.png


高速方法

7bd72dd4-f78f-4647-bbf3-ac84801e89e4.png

三,加速你的循环

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


低速方法

6cfd741b-d128-4694-b7cf-c98c31a43fd3.png


高速方法

65fa72d1-48d1-4be0-8d9b-f8170dec195d.png


第8式,在循环体中避免重复计算


低速方法

ee4e4405-53a1-4c4a-91b1-996c373e3a5f.png


高速方法

756cb0f5-9fe8-4f6a-aeb6-2c3796da43e3.png

四,加速你的函数

第9式,用循环机制代替递归函数


低速方法

e198b966-02ca-49d0-8758-86b7afa7ea4b.png


高速方法

0f698df6-46c2-4d34-a4df-138372378048.png


第10式,用缓存机制加速递归函数


低速方法

ec673cbb-9857-4e9a-ac44-4e6d68319121.png


高速方法

e18f7271-3fe4-4094-a05d-0e68e15e1ba4.png


第11式,用numba加速Python函数


低速方法

697e7fcb-cd5f-4862-97c4-1411e0672bd4.png


高速方法

804dfd62-eff7-4b13-a917-5561b40fafdb.png

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

第12式,使用collections.Counter加速计数

低速方法

c27427ba-fcc0-45ca-b3e7-055ec82146e9.png


高速方法

37a99c2f-8ca3-4f9b-ac01-9d09bf966c5e.png

第13式,使用collections.ChainMap加速字典合并

低速方法

753e2eb1-4c0c-4cfe-ab67-221015c9b5cc.png

00c904bb-08bb-48d6-8e26-584c0030ffed.png


高速方法

141db8d6-fc4a-49b5-b65a-74dc413751de.png

六,使用高阶函数进行加速

第14式,使用map代替推导式进行加速

低速方法

c48bf326-6485-418f-ad7e-f23bc665c509.png


高速方法

3bf1224f-8186-4ef6-bd4d-cc85dfd16121.png

第15式,使用filter代替推导式进行加速

低速方法

6e2a25c1-ed16-4afa-b8a9-360a353cfb65.png


高速方法

f6557d03-254a-4e36-8d26-c73d23dcd6f3.png

七,使用numpy向量化进行加速

第16式,使用np.array代替list

低速方法

20af21d2-7935-4d54-b554-d80cbef2896f.png


高速方法

39747e90-d530-4a78-bf67-eb7ef048a597.png

第17式,使用np.ufunc代替math.func

低速方法

e039a957-0da4-4020-b577-b014c6cfa078.png


高速方法

f33a9161-298d-4714-9adc-d9c8cda4aaad.png


第18式,使用np.where代替if

低速方法

ba2fceb0-9487-4308-ae67-0d2be4e3e2fc.png

2357633e-3eb0-45c5-ac2d-4a6760c6e3a4.png


高速方法

4474983b-9709-44f9-811c-b1af3be21ce9.png

八,加速你的Pandas

第19式,使用csv文件读写代替excel文件读写


低速方法

f12eec96-4c44-444a-b000-10bf66cf1eb7.png


高速方法

c19084ed-9b2e-4a34-b683-0c4bf029e570.png

第20式,使用pandas多进程工具pandarallel


低速方法

257f5e44-e07f-4ba8-8287-acfdc70ded52.png

ddd920fd-2402-472c-96d5-9505c3a75d35.png


高速方法

de0c5096-b089-43ca-8f72-3df440f75b20.png

九,使用Dask进行加速

第21式,使用dask加速dataframe

低速方法

d240ccb0-ab85-48fb-b69f-4eafcc2cd3ae.png


高速方法

69dd0228-8f77-47fb-89e2-e7bd27ef896c.png

第22式,使用dask.delayed进行加速

低速方法

0af1e9c0-e8ff-48a7-836e-db358cabd0a7.png

fba50b00-780a-405c-8a26-7107629abd3a.png


高速方法

20a904fc-2429-443e-a41c-54d8f8c986f5.png


十,应用多线程多进程加速

第23式,应用多线程加速IO密集型任务

低速方法

9daa3d76-8876-456c-bdcd-93b2f0f9e1c1.png


高速方法

59512f63-55e3-4fc8-a460-29f2cd9c99e1.png

第24式,应用多进程加速CPU密集型任务

低速方法

66395a5f-6f98-4eb9-8509-b25ae041e4a6.png


高速方法

2e605ea0-0d2a-480f-b056-1d3c3e703596.png


——The  End——

d6473868-f1bb-4cef-81d8-810170c9abb5.gif


本文分享自微信公众号 - 生信科技爱好者(bioitee)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

posted @ 2019-06-11 20:57  章鱼猫先生  阅读(30)  评论(0编辑  收藏  举报