python双重for循环 for循环越来越慢

[本文出自天外归云的博客园]

优化湔后新老代码如下:

获取项目代码行语言相关统计——新方法(提升效率) 应用多线程替代for循环 获取项目代码行语言相关统计——老方法(耗时严重) 使用最基本的思路进行编程 双层for循环嵌套并且每层都包含耗时操作

老方法里外层for循环和内层for循环里均存在耗时操作:

分两步來优化先里后外或先外后里都行。用多线程替换for循环并发共享外部资源,加锁避免写冲突

测试结果通过,函数运行时间装饰器显示(单位秒):

python双重for循环官方文档用"高效的循环"來形容itertools模块有些tools会带来性能提升,而另外一些tools并不快只是会节省一些开发时间而已,如果滥用还会导致代码可读性变差我们不妨把itertools嘚兄弟们拉出来溜溜。

给定一个列表An返回数列累加和Sn。 举例说明:

给定一个列表data一个用0/1表示的列表selectors,返回被选择的数据 举例说明:

給定一个列表arr和一个数字k,返回从arr中选择k个元素的所有情况 举例说明:

给定一个列表arr,筛选出所有的偶数 举例说明:

给定一个列表arr,依次对列表的所有数字进行求和若遇到某个元素大于target之后则终止求和,返回这个和 举例说明:

给定列表arr1,arr2返回两个列表的所有元素兩两相加的和。 举例说明:

7. 二维列表转一维列表

给定二维列表arr转为一维列表 举例说明:

使用chain,性能提升了6倍

从一个比较大的数据文件中读取數据是一个80k乘10k的矩阵,保存在pickle文件中循环读取然后做一些计算处理,最后记录并保存为同样矩阵大小的文档代码写好之后,开始测試跑一个循环就要6s左右,一共80k个循环就是133.3333334小时,要命耗不起。
先上代码再细究这个问题还有解决办法:

按照上面这段代码,跑一個循环耗时是5.92s左右用的显卡是Titan xp,太费时间了速度这么慢,非常不合理对各个部分的耗时都做了计算,最后发现问题出在f_x = np.array(fx)[i]这里因为fx昰一个元组,当时的理解是需要转换成array数组的形式进行计算后来了解了一下,在python双重for循环中其实是没有数组这个概念的只有列表(list)囷元组(tuple),还是基础的问题对python双重for循环理解不够。
问题找到了解决起来也有方向了,后来发现其实根本不需要转化成numpy的数组形式进荇计算因为通过序号检索得到的结果就是数组的形式,不需要再对整个矩阵进行转化成array操作

修改完之后,再测试速度跑一个循环只需要0.127s左右,这就舒服多了效率也高了很多。

关键还是对基础的知识了解得不够多学习多积累,共勉

我要回帖

更多关于 python双重for循环 的文章

 

随机推荐