【教你:如何花最少的时间学习,花最少的时间优化,就可以提高代码的运行速度呢?】

Python中有全局解释器锁,他的直观含义是,一次只能处理一个线程。所以多线程是GG了,如果想要优化速度,应该是从多进程的角度考虑。一个进程包含多个线程。那么,如何花最少的时间学习,花最少的时间优化,就可以提高代码的运行速度呢?可以借助numpy来实现,如果你感兴趣了,请认真看下去。

举一个例子,我们用numpy生成一个1000000*1的随机数矩阵,我们需要对这100万个数做一个简单的逻辑判断与计算。相信,正常情况下,你们会定义这个函数,并单纯使用for loop来写:

​
​import numpy as npx = np.random.rand(1000000)#for loop
def f(x):if x<0.5:return xelse:return x**2​start=datetime.datetime.now()
y=np.full([x.shape[0],1],np.nan)
for i in range(x.shape[0]):y[i]=f(x[1])end=datetime.datetime.now()
print("For loop cost %s microseconds"%str((end-start).microseconds))

但是可以看到,这样写的效率很低,需要较长的运行时间。而效率低的原因是:CPU使用率低,即没有并行。

可以看到,CPU的使用效率仅仅为39%。而并行则可以让使用率不断上升,到接近100%的程度,从而充分利用计算资源。

由于这个任务较为简单,时间花费也在微秒级,所以使用率到达63%左右就足够了。在十分消耗计算资源的任务中,numpy是可以达到100%的,同理,非常成熟的xgboost也可以达到100%。因此,建议各位先将一些loop的习惯改为用numpy的矩阵运算或者拼接运算,局部的小小提升会让复杂项目有很显著的提升,也许这个模块能快1s的话,一个15年期的量化回测程序(已经有了股票*仓位)可以节约5分钟,让15年的多因子选股算法(例如xgboost)节约3个小时以上。

以下是拼接算法的示例:

#vetorize,顾名思义,垂直拼接
start=datetime.datetime.now()
y=np.vectorize(lambda x:x if x<0.5 else x** 2.0)(x)
end=datetime.datetime.now()
print("Vectorize in np cost %s microseconds"%str((end-start).microseconds))#define the function, and loop in np
f = lambda x: x if x<0.5 else x ** 2.0
start=datetime.datetime.now()
y=np.fromiter((f(xi) for xi in x),x.dtype,count=len(x))
end=datetime.datetime.now()
print("Loop in np cost %s microseconds"%str((end-start).microseconds))#np.where, pass the value by true or false
start=datetime.datetime.now()
y=np.where(x<5,x,x**2.0)
end=datetime.datetime.now()
print("Np.where cost %s microseconds"%str((end-start).microseconds))#map the results together,it needs use, but the loop performs in the c-package
#which is better than the loop in python
f = lambda x: x if x<0.5 else x ** 2.0
start=datetime.datetime.now()
y=np.array(map(f,x))
end=datetime.datetime.now()
print("Np.map cost %s microseconds"%str((end-start).microseconds))

运行后,对比这5种方法的损耗,如下所示:

For loop cost 844008 microseconds
Vectorize in np cost 260304 microseconds
Loop in np cost 294181 microseconds
Np.where cost 7979 microseconds
Np.map cost 997 microseconds

在这个例子中来看,numpy.map是最快的。当然,在其他问题中,我们还需要结合需求,考虑一下任务中其他部分和这部分的耦合关系,是否这里这么写真的会为整个系统的运行带来好处。

【花最少的时间、力气】Python并行计算相关推荐

  1. div置于页面底部_网易内部PPT模板有点丑,如何花最少的时间提高页面颜值?

    经常有朋友或者同事跟我吐槽:公司的模板太丑了,导致做出来的 PPT 有点辣眼睛! 不知道是模板真丑,还是拼命想甩锅... (不接受你的白眼) 所以,我就暗自搓搓手,就拿网易内部PPT开刀,用两个屡试不 ...

  2. 花最少的时间驱动湿温度传感器之RT-Thread sht3x之(DIY一个小小天气站+万年历)

    我们在文章的第一节基础上添加一个sht3x的软件包,在此之前需要先了解下sht3x是什么. 1.什么是sht3x? sht3x是温湿度传感器的驱动,它实现了温湿度的单次查询,目前在RT-Thread上 ...

  3. python半年能达到什么程度_花半年的时间能把Python自学到什么程度?

    1.简单说一下我想自学Python的出发点,Python在数据的分析处理上有自己独特的优势,前些年的互联网一直在收集用户的信息,接下来要对数据进行分析,所以个人感觉Python在以后会更加受欢迎,个人 ...

  4. 风变编程python助教_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  5. 风变编程python课_花30天时间,学完了风变编程Python基础语法课

    原标题:花30天时间,学完了风变编程Python基础语法课 20节实打实的课程,1个月时间,我终于学完了风变编程的Python基础语法课.刚开始学的时候,就有人问我感受怎么样,当时本着未知全貌不予置评 ...

  6. 【程序员讲装修】如何花最少的钱做出最出彩的装修效果?

    [程序员讲装修]如何花最少的钱做出最出彩的装修效果? 前言 首先先自我介绍一下,做过程序员,也做过装修,现在自由职业.有空写写文章,用程序员的思维规范化系统化定义装修,梳理自己的装修知识模块,说不定这 ...

  7. linux下软件更新,Linux安装软件每次靠百度,这次花了些时间,终于算是搞明白了...

    Linux下安装命令虽然经常使用,但也仅仅是会使用,每次再用时依然的百度 .于是就花了些时间整理了一番,以便于更好地理解. 1.安装流程介绍 在Linux下安装软件,其实也是遵循着和Windows一样 ...

  8. 怎么花最少的钱用最多的流量?告诉你“保底+流量卡”才是王道.

    众所周知,三大运营商的流量太贵了,基本上可以划到5元/G了,那么,对于流量一族的用户来讲,怎么才能用最少的钱用最多的流量呢,接下来,我们一块来聊聊这个话题. 想要花最少的钱用最多的流量,这个时候你可以 ...

  9. python并行计算|pycuda测试、对比及分析

    python并行计算|pycuda测试.对比及分析 增量式学习算法能够同时学习网络的节点与参数,但是随着模型结构的增长,计算成本也越来越高,有两个途径可以减少计算所需的时间成本:(1)研究模型划分方法 ...

最新文章

  1. pip 查看安装路径
  2. 架构无小事:QQ碰微信 贴吧遇微博
  3. chrome developer tools小技巧
  4. 组词组合 php,PHP组词算法实现详解
  5. canvas 绘制圆形进度条
  6. android+studio2.1+是否不支持感染到了.0,Android studio 2.2.3 升级到2.3遇到的问题
  7. 诺基亚继续打情怀牌:怀旧小屏手机入网!
  8. 调试工具BTrace 的使用--例子
  9. 陕西省计算机中考模拟试题软件,中学信息技术考试练习系统——陕西省版
  10. libmodbus 开发说明
  11. MySQL登录命令详解
  12. springboot自定义start解析(start中配置从数据源)
  13. 【云原生】什么是 CI/CD ?| 软件交付中常见的问题
  14. python 数据分析核心--pandas
  15. 使用rufus制作Windows Server 2012 R2 U盘_wentfar·tsao
  16. 如何装计算机网络驱动,如何安装驱动 电脑驱动的几种安装方法
  17. 上海财经大学如何构建量化高频数据中心?
  18. 自己眼中的女朋友VS家长眼中的女朋友
  19. python量化 双均线策略(金叉死叉)
  20. openwrt旁路由 ipv6上网配置

热门文章

  1. 2022 年全国硕士研究生入学统一考试管理类专业学位联考逻辑试题——纯享题目版
  2. 检查计算机端口通不通,Win7怎么测试端口是否打开 win7测试某个端口是否打开的方法...
  3. 【 Qt Installer Framework安装包制作】
  4. 国产UOS平台 Run安装包制作
  5. java学习--2. Java入门
  6. 网站建设--团队的重要性
  7. [ctf web]基于多线程的sql注入的fuzz测试过滤参数模板
  8. SpringBoot整合Dubbo报错: java.lang.ClassCastException
  9. 学校学生心理测评系统
  10. 在ie中实现placeholder属性(其实主要针对ie8,9)