0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python性能分析的技巧说明

电子设计 来源:电子设计 作者:电子设计 2020-12-24 15:16 次阅读

当我们开始精通编程语言时,我们不仅希望实现最终的编程目标,而且还希望可以使我们的程序更高效。在本文中,我们将学习一些Ipython的命令,这些命令可以帮助我们对Python代码进行时间分析。注意,在本教程中,我建议使用Anaconda。1.分析一行代码要检查一行python代码的执行时间,请使用**%timeit**。下面是一个简单的例子来了解它的工作原理:#### magics命令%timeit的简单用法%timeit [num for num in range(20)]

#### 输出1.08 ?s ± 43 ns per loop (mean ± std. dev. of 7 runs, 1000000 loops each)主要注意事项:在要分析的代码行之前使用%timeit它返回代码运行的平均值和标准偏差。在上面的示例中,执行了7次,每次执行对该代码循环100万次(默认行为),这需要平均1.08微秒和43纳秒的标准偏差。在调用magic命令时,可以自定义运行和循环的数量,示例如下:#### 在%timeit magic命令中自定义运行和循环数%timeit -r5 -n100 [num for num in range(20)]
1.01 ?s ± 5.75 ns per loop (mean ± std. dev. of 5 runs, 100 loops each)使用命令选项-r和-n,分别表示执行次数和循环次数,我们将时间配置文件操作定制为执行5次和循环100次。2.分析多行代码本节向前迈进了一步,并解释了如何分析完整的代码块。通过对%timeit magic命令进行一个小的修改,将单百分比(%)替换为双百分比(%%),就可以分析一个完整的代码块。以下为示例演示,供参考:#### 使用timeblock%%代码分析%%timeit -r5 -n1000for i in range(10): n = i**2 m = i**3 o = abs(i)
#### 输出10.5 ?s ± 226 ns per loop (mean ± std. dev. of 5 runs, 1000 loops each)可以观察到for循环的平均执行时间为10.5微秒。请注意,命令选项-r和-n分别用于控制执行次数和循环次数。3.代码块中的每一行代码进行时间分析到目前为止,我们只在分析一行代码或代码块时查看摘要统计信息,如果我们想评估代码块中每一行代码的性能呢?使用Line_profiler 。Line_profiler 包可用于对任何函数执行逐行分析。要使用line_profiler软件包,请执行以下步骤:安装—Line_profiler 包可以通过简单的调用pip或conda Install来安装。如果使用的是针对Python的anaconda发行版,建议使用conda安装#### 安装line_profiler软件包conda install line_profiler加载扩展—一旦安装,你可以使用IPython来加载line_profiler:#### 加载line_profiler的Ipython扩展%load_ext line_profiler时间分析函数—加载后,使用以下语法对任何预定义函数进行时间分析%lprun -f function_name_only function_call_with_arguments语法细节:对line_profiler的调用以关键字%lprun开始,后跟命令选项-f命令选项之后是函数名,然后是函数调用在本练习中,我们将定义一个接受高度(以米为单位)和重量(以磅为单位)列表的函数,并将其分别转换为厘米和千克。#### 定义函数def conversion(ht_mtrs, wt_lbs ): ht_cms = [ht*100 for ht in ht_mtrs] wt_kgs = [wt*.4535 for wt in wt_lbs]
#### 定义高度和重量列表:ht = [5,5,4,7,6]wt = [108, 120, 110, 98]
#### 使用line_profiler分析函数%lprun -f conversion conversion(ht,wt)
---------------------------------------------------------------#### 输出Total time: 1.46e-05 s
File: <ipython-input-13-41e195af43a9>
Function: conversion at line 2
Line # Hits Time Per Hit % Time Line Contents============================================================== 2 1 105.0 105.0 71.9 ht_cms = [ht*100 for ht in ht_mtrs] 3 1 41.0 41.0 28.1 wt_kgs = [wt*.4535 for wt in wt_lbs]输出详细信息:以14.6微秒为单位(参考第一行输出)生成的表有6列:第1列(行#)—代码的行号(请注意,第#1行是故意从输出中省略的,因为它只是函数定义语句)第2列(命中)—调用该行的次数第3列(时间)—在代码行上花费的时间单位数(每个时间单位为14.6微秒)第4列(每次命中平均时间)—第3列除以第2列第5列(%Time)—在所花费的总时间中,花在特定代码行上的时间百分比是多少第6列(内容)—代码行的内容你可以清楚地看到,高度从米到厘米的转换几乎占了总时间的72%。结束语利用每一行代码的执行时间,我们可以部署策略来提高代码的效率。

希望这篇文章能给你提供帮助,你能学到一些新东西。

审核编辑:符乾江
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 可编程逻辑
    +关注

    关注

    7

    文章

    516

    浏览量

    44111
  • 性能分析
    +关注

    关注

    0

    文章

    10

    浏览量

    8040
  • python
    +关注

    关注

    56

    文章

    4799

    浏览量

    84817
收藏 人收藏

    评论

    相关推荐

    华为云 Flexus X 实例下的场景体验——小企业使用 Python 语言——超迅速搭建简单公网 API 接口服务

    ,希望本文可以对小企业来说有一定的帮助作用。 目录 前言 环境说明 连接并安装 Python 环境 Python Web 接口编码 上传 WebAPI 接口代码 安装 flask
    的头像 发表于 12-27 13:46 127次阅读
    华为云 Flexus X 实例下的场景体验——小企业使用 <b class='flag-5'>Python</b> 语言——超迅速搭建简单公网 API 接口服务

    对比Python与Java编程语言

    使得编写代码更加灵活,但也可能导致运行时错误。 Java 语法相对冗长,需要显式声明变量类型,增加了代码的可读性和安全性。 静态类型系统在编译时进行类型检查,减少了运行时错误。 二、性能 Python 解释型语言,运行速度通常比Java慢,但对于许多应用场景
    的头像 发表于 11-15 09:31 350次阅读

    使用Python进行图像处理

    下面是一个关于使用Python在几行代码中分析城市轮廓线的快速教程。
    的头像 发表于 11-07 10:14 249次阅读
    使用<b class='flag-5'>Python</b>进行图像处理

    TPS22995H-Q1 湿度性能应用说明

    电子发烧友网站提供《TPS22995H-Q1 湿度性能应用说明.pdf》资料免费下载
    发表于 09-09 11:00 0次下载
    TPS22995H-Q1 湿度<b class='flag-5'>性能</b>应用<b class='flag-5'>说明</b>

    单片机STM32可以用Python写吗?可以的开发板有哪些?

    近年来,随着嵌入式技术的发展,Python语言逐渐被引入到单片机开发中,尤其是一些高性能的单片机上。这一趋势给开发者带来了极大的便利,尤其是在快速原型设计和实验中。本文将详细探讨STM32单片机是否
    的头像 发表于 09-05 08:00 3805次阅读
    单片机STM32可以用<b class='flag-5'>Python</b>写吗?可以的开发板有哪些?

    pytorch和python的关系是什么

    在当今的人工智能领域,Python已经成为了最受欢迎的编程语言之一。Python的易学易用、丰富的库和框架以及强大的社区支持,使其成为了数据科学、机器学习和深度学习等领域的首选语言。而在深度学习领域
    的头像 发表于 08-01 15:27 2082次阅读

    Python建模算法与应用

    Python作为一种功能强大、免费、开源且面向对象的编程语言,在科学计算、数学建模、数据分析等领域展现出了卓越的性能。其简洁的语法、对动态输入的支持以及解释性语言的本质,使得Python
    的头像 发表于 07-24 10:41 580次阅读

    Python在AI中的应用实例

    Python在人工智能(AI)领域的应用极为广泛且深入,从基础的数据处理、模型训练到高级的应用部署,Python都扮演着至关重要的角色。以下将详细探讨Python在AI中的几个关键应用实例,包括机器学习、深度学习、自然语言处理、
    的头像 发表于 07-19 17:16 1180次阅读

    如何实现Python复制文件操作

    Python 中有许多“开盖即食”的模块(比如 os,subprocess 和 shutil)以支持文件 I/O 操作。在这篇文章中,你将会看到一些用 Python 实现文件复制的特殊方法。下面我们开始学习这九种不同的方法来实现 Pyt
    的头像 发表于 07-18 14:53 438次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV-Python
    的头像 发表于 07-16 10:38 1267次阅读

    网络爬虫,Python和数据分析

    电子发烧友网站提供《网络爬虫,Python和数据分析.pdf》资料免费下载
    发表于 07-13 09:27 1次下载

    用pycharm进行python爬虫的步骤

    以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
    的头像 发表于 07-11 10:11 889次阅读

    SAGE算法的性能分析

    电子发烧友网站提供《SAGE算法的性能分析.pdf》资料免费下载
    发表于 02-28 10:38 0次下载

    基于Python的地图绘制教程

    本文将介绍通过Python绘制地形图的方法,所需第三方Python相关模块包括 rasterio、geopandas、cartopy 等,可通过 pip 等方式安装。
    的头像 发表于 02-26 09:53 1256次阅读
    基于<b class='flag-5'>Python</b>的地图绘制教程

    如何使用linux下gdb来调试python程序

    如何使用linux下gdb来调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。GDB是一个强大的调试工具,可以帮助开发者诊断和修复程序中的错误。在本文
    的头像 发表于 01-31 10:41 2666次阅读