Python:IPython性能度量

有时您可能需要比较两个类似操作的性能。

IPython为您提供了一个魔法命令 timeit 来执行此操作。它多次运行代码以获得更准确的结果。同样,它也适用于度量单行代码。

例如,你知道下面哪个加法运算更好吗?

x = 5;y = x**2;

x = 5;y = x*x;

x = np.uint8([5]);y = x*x,或者y = np.square(x)?

我们将在IPython shell中通过timeit找到答案。

x = 5
%timeit y=x**2
# 结果
10000000 loops, best of 3: 73 ns per loop
%timeit y=x*x
# 结果
10000000 loops, best of 3: 58.3 ns per loop
z = np.uint8([5])
%timeit y=z*z
# 结果
1000000 loops, best of 3: 1.25 us per loop
%timeit y=np.square(z)
# 结果
1000000 loops, best of 3: 1.16 us per loop

可以看到,x = 5;y = x*x是最快的,它比Numpy大约快20倍。

如果还考虑数组的创建,可能会快100倍。很酷,对吧?*(Numpy开发者正在处理这个问题)*

【注意】

Python标量操作比Numpy标量操作快。因此,对于包含一个或两个元素的操作,Python scalar要比Numpy数组好。

当数组的大小稍微大一点时,Numpy具有优势。

我们再举一个例子。这一次,我们将比较相同映像的vc . countnonzero()和np.count_nonzero()的性能。

%timeit z = cv.countNonZero(img)
# 结果
100000 loops, best of 3: 15.8 us per loop
%timeit z = np.count_nonzero(img)
# 结果
1000 loops, best of 3: 370 us per loop

看,OpenCV函数比Numpy函数快了近25倍。

【注意】

通常,OpenCV函数比Numpy函数更快。因此,对于相同的操作,首选的是OpenCV函数。

但是,也有例外,特别是当Numpy使用视图而不是副本时。

更多的IPython魔法命令

还有其他一些神奇的命令可以测量性能、分析、行分析、内存测量等等。

它们都有很好的文档记录。所以这里只提供这些文档的链接。有兴趣的读者可以试一试。

性能优化技术

有几种技术和编码方法可以最大限度地利用Python和Numpy的性能。这里只列出相关的资料,并提供重要资料的链接。

这里要注意的主要事情是,首先尝试以一种简单的方式实现算法。一旦它开始工作,分析它,然后发现瓶颈,并优化它们。

常用技巧如下:

  1. 尽量避免在Python中使用循环,特别是双/三重循环等。它们天生就很慢。
  2. 将算法/代码向量化到可能的最大程度,因为Numpy和OpenCV针对向量操作进行了优化。
  3. 利用缓存一致性。
  4. 除非必要,不要复制数组。尝试使用视图代替。数组复制是一项开销很大的操作。

如果您的代码在执行了所有这些操作之后仍然很慢,或者不可避免地要使用大的循环,那么可以使用Cython等其他库来提高速度。

附加资源

Python优化技术:https://wiki.python.org/moin/PythonSpeed/PerformanceTips

Scipy课堂笔记-高级Numpy:http://scipy-lectures.org/advanced/advanced_numpy/index.html#advanced-numpy

IPython中的计时和分析:https://pynash.org/2013/03/06/timing-and-profiling/

Python:IPython性能度量相关推荐

  1. 机器学习性能度量(1):P-R曲线与ROC曲线,python sklearn实现

    最近做实验要用到性能度量的东西,之前学习过现在重新学习并且实现一下. 衡量模型泛化能力的评价标准,这就是性能度量.性能度量反应了任务需求,在对比不同模型的能力时,使用不同的性能度量往往会导致不同的评判 ...

  2. 机器学习:性能度量篇-Python利用鸢尾花数据绘制ROC和AUC曲线

    文章目录 前言 一.ROC与AUC 1.ROC 2.AUC 二.代码实现 总结 前言 内容接上一篇机器学习:性能度量篇-Python利用鸢尾花数据绘制P-R曲线_fanstuck的博客-CSDN博客_ ...

  3. 机器学习性能度量(2):错误接受率 (FAR), 错误拒绝率(FRR),EER计算方法,python实现

    上一篇博文中讨论了两种常用的性能度量查准率(precision)查全率(recall,也叫召回率)对应的P-R图与真正例率(TPR),假正例率(FPR)对应的ROC图.详情请看https://blog ...

  4. python程序分析,用Python编写分析Python程序性能的工具的教程

    用Python编写分析Python程序性能的工具的教程 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  用Python编写分析Python程序性能的工具的教程.tx ...

  5. 聚类性能度量指标及距离计算

    Python实现KMeans算法 1.外部指标 将聚类结果与某个"参考模型进行比较" 每次抽出两个样本,讨论所属聚类结果和参考模型,确定四个值: a:聚类结果同属于一类,参考模型同 ...

  6. 机器学习之性能度量指标——决定系数R^2、PR曲线、ROC曲线、AUC值、以及准确率、查全率、召回率、f1_score

    一.线性回归的决定系数(也称为判定系数,拟合优度) 相关系数是R哈~~~就是决定系数的开方! 正如题所说决定系数是来衡量回归的好坏,换句话说就是回归拟合的曲线它的拟合优度!也就是得分啦~~ 决定系数它 ...

  7. 机器学习中的三对性能度量参数

    文章目录 1 分类结果混淆矩阵 2 错误率和精度 3 查准率P和查全率R 4 真正例率TPR和假正例率FPR 1 分类结果混淆矩阵 2 错误率和精度 错误率:分类错误的样本数占样本总数的比例 精度:分 ...

  8. linux i查看o性能度量,11.9.18 学习笔记:性能管理

    性能监视 ※DBA必须定期监视性能以查找瓶颈所在,然后更正问题 监控内容包括: 内存分配问题 I/O设备争用 资源争用 应用程序代码问题 网络瓶颈 ※从网络性能和I/O速度到运行单个程序操作所花费的时 ...

  9. 哪些模块可用于python性能分析_提升Python程序性能的方法有哪些?看完你就知道啦!...

    掌握一些技巧,可尽量提高Python程序性能,也可以避免不必要的资源浪费.今天就为大家带来七个可以提升python程序性能的好习惯,赶快来学习吧:. 1.使用局部变量 尽量使用局部变量代替全局变量:便 ...

最新文章

  1. 美团点评业务风控系统构建经验
  2. 浏览器内存不足导致页面崩溃_深度精读:浏览器渲染原理 [8000字图文并茂]
  3. 缓存-分布式锁-Redisson简介整合
  4. Atitit.eclipse git使用
  5. ATL 中 USES_CONVERSION 的具体功能
  6. Spring Cloud学习笔记---Spring Cloud Sleuth--新建两个互相调用的服务测试zipkin
  7. 金属、指纹、全网通该有的都有 中兴小鲜3正式发布
  8. 超长攻略,机器学习基石!带你涉足王者之巅
  9. github 创建工程
  10. qq解冻显示服务器开小差了是什么意思,腾讯内容开放平台
  11. 给一段下雪的代码。。。
  12. 多媒体文件格式(五):PCM / WAV 格式
  13. 弘辽科技:淘宝联盟的推广方式有哪些?
  14. Linux中Python程序CPU占用高排查
  15. 201709-2 公共钥匙盒 ccf
  16. 云网融合解决方案|快数据云管平台(CMP)最优解决方案
  17. go每日新闻(2021-02-02)——Go1.16 新特性:一文快速上手 Go embed
  18. mysql九九查询法_mysql日期查询法
  19. Docker 安装 TensorFlow GPU 实战 1
  20. win7开机黑屏怎么解决?win7开机黑屏出现reboot and select的解决方法

热门文章

  1. es大量数据导入效率优化
  2. 12 mysql性能抖动
  3. Redis集群环境之linux搭建多机版---已完结,跟着一步一步来你就可以集群成功
  4. 【VTK】VTK 之一 环境准备
  5. js深入研究之神奇的匿名函数类生成方式
  6. 那些年我们踩过的坑-NSTimer
  7. java中结构体入参_JNA中自定义结构体如何传参?
  8. mysql关键字test_MySQL关键字Distinct的详细介绍
  9. Python如何运行.ipynb文件并将其转化为.py文件
  10. 高性能爬虫原理与应用