for循环次数太多的时间优化_数据分析工具篇——for循环运算优化(二)

书接上文,我们在前面介绍了for循环的简单优化方法,今天我们深度分析一下for循环的优化思路,还记不记得前一篇文章《数据分析工具篇——for循环运算优化(一)》中的案例:

import timestart_time = time.time()datas = 0for t in range(0, 1000):    for i in range(0, 1000):        for j in range(0, 1000):            datas = datas + i + j + tend_time = time.time()print(datas)print(end_time-start_time)

对这段代码可以说是非常熟悉了吧,我们给出了多套优化方案,介绍完pandas之后我们对python的包有了一个基本的认知,基于python现成的包我们再做一次优化,用到的函数即为:reduce。

在进行for循环优化过程中主要方法有两个:一个是apply,一个是reduce。应用场景也有两个:

1)reduce对应的是跨行计算,即第一行的计算结果会叠加到第二行,计算完成后再叠加到第三行,以此循环;

2)apply对应的是单行计算,即第一行计算后返回一个值,第二行计算后返回一个值,各行之间互不干扰。

reduce方法

1799de855d26bc1de742d7c808c6c937.gif cffe6acf09d4ec059c2df6d98a770a7f.png

针对上文的代码,我们用reduce方法优化可以得到如下代码:

import timeimport numpy as npfrom functools import reducedata = 0start_times = time.time()data = reduce(lambda x, y: x + y, np.arange(1000))data1 = reduce(lambda x, y: x + (1000*y + data), np.arange(1000)) + datadata2 = reduce(lambda x, y: x + (1000000*y + data1), np.arange(1000)) + data1end_times = time.time()print(data2)print(end_times - start_times)

有没有感觉很简洁,主代码只有三行,而且没有嵌套存在,对应的运算结果如下:

f323d2b1392f27e18eecd2141a6be756.png

时间上确实有所提高,同时代码的简洁程度也提高不少,代码优化到这里有没有感觉小有成就?

我想是有的~

除了reduce,其他函数有没有新的优化方法,肯定是有

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值