为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

了解优化的步骤

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

进群:125240963  即可获取数十套PDF哦1

本小节将简要介绍软件优化的步骤。

处理流程

下面的内容介绍了我们将要使用的代码优化步骤。

1.建立现有代码的基线性能(执行时间、内存消耗、峰值I/O带宽等)。

2.确定性能目标以及系统的上限。以终为始是高效能人士的七个习惯之一,优化也是同样的道理。代码需要执行多快?完成任务可接受的最长时间是多少?软件最大可以占用多少内存?计算结果需要多准确?结果需要怎样的保真度?

3.建立测试和度量环境,可以帮助你迅速测量相关的性能指标。如果能够更容易地度量每一行代码性能,那么就可以更快地优化代码。如果度量的过程十分痛苦并且总要去记一些你会忘记的命令,优化的过程就会变得痛苦而缓慢。

4.记录当前代码的所有参数和状态快照。

5.利用剖析器寻找代码瓶颈。

6.从最主要的瓶颈入手来解决性能问题。鉴于代码的复杂度,每轮测试只解决一个问题是一种安全的方法

7.利用剖析器分析修改后的代码,检查结果是否有变化。

8.跳回第4步,尽可能多地重复进行。

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

识别代码中常见性能瓶颈

在优化数据科学项目的过程中,查看整个分析过程、了解每个阶段所需要消耗的时间以及它们之间的关系是十分重要的。

让我们把问题简化成减少软件的执行时间,且只考虑使用一种特定的语言来实现这个软件。在这里,我们不考虑处理大数据集,也就是说,将数据规模从生产数据库规模降到简单分析用的数据。

从更抽象的层次来说,执行时间只和代码本身以及硬件条件相关。如果想要降低运行时间,要么修改代码,要么升级硬件,或者两者同时进行。

对于优化来说,我们必须时刻记住自己的目的是什么:必须达到何种程度的优化或者软件需要运行多快。

将运行时间降为原来的二分之一和降低一个数量级是两种完全不同的优化方式,通常后者需要代码发生根本性的变化。

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

  • cos:余弦sin:正弦tan:正切acos:反余弦asin:反正弦atan:反正切exp:幂运算pow:以10为底的对数ln:自然对数cosh:双曲余弦sinh:双曲正弦tanh:双曲正切acosh:反双曲余弦asinh:反双曲正弦atanh:反双曲正切

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

在编写计算复杂的代码时,大部分代码都写得很简单明了,使得作者可以一次就得到正确的结果。这就意味着可能会有一些不必要的复杂计算、速度慢的代码存在,尤其是在条件判断附近。如果你使用的是编译型语言,编译器可能会对代码进行重新排列,但是最好还是不要过于依赖它(动态语言和JVM上运行的语言,在运行期很难判断它们究竟会做什么)。

对于第六步,大部分数学表达式写出来都是给人看的,而不是为了让现代计算机软件和硬件可以很好地运行。简单修改一下等式,去除一些项或者改写一些项都会带来性能的提升。例如,将乘法转为加法,除法转为乘法。对于那些需要执行上亿的操作来说,这些小小的改动会带来时间上巨大的节省。加减预算要快于乘法,而乘法又要快于除法。

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

工作原理

asa.py的main()函数处理包含需要被分析的分子信息的文件及其他命令行参数。当利用 molecule.py中的方法导入分子结构后,再调用calculate_asa函数来处理之后的所有计算。

文件的顶端,找到第一个函数generate_sphere_points(),这个函数可以计算在指定半径范围内的等距点的个数,并将等距点以三元组列表的形式返回。

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

代码中有一个遍历所有索引的循环。在循环内部,neighbor_indices变量随迭代不断增长,vector3d.py中的pos_distance函数不断被调用。在函数中,我们看到首先计算两点p1和p2的距离的平方,然后取平方根的操作,如下面的代码所示。

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

接下来进入第二层循环,遍历sphere_points中的每一个点。如果使用认的960个节点,那么循环将有960次迭代。对于平面等距点结合中的每一个点,我们加入当前原子的中心坐标。

然后就是最内层循环,遍历所有的邻近原子。对于每个邻近原子,我们比较test_point到邻近原子中心的距离。如果两点之间在一个特定的距离内,我们就认为test_point不能被溶剂分子接触。

用另一种方式来解释,内部两层循环利用预先生成好的表面等距点生成测试原子。然后检查每个点,看看是否存在有一个邻近原子在指定的距离内。如果存在,那么表面上的这个点就被认为是不可被接触的。

原子的可接触区域即为被邻近节点所阻断的原子周围表面部分。

三层嵌套循环和大量的计算意味着有很大的性能提升空间。

为什么优化Python的代码?月薪25K的程序员用万字长文告诉你!

  • 了解数据科学的路径,并且帮助Mac、Windows和Linux操作系统的读者恰当地搭建数据科学环境。对汽车数据进行分析和可视化,从中发现不同时间燃料效率的变化趋势和模式。
  • 模拟美式橄榄球比赛数据(R)
  • 读者展示如何搭建自己的选股系统,并且使用移动平均法分析股票历史数据。
  • 就业数据的可视化探索(R)。向读者展示如何从劳动统计获取雇佣和收入数据,并且用R对不同水平的数据进行空间分析。
  • 运用税务数据进行应用导向的数据分析(Python)。向读者展示如何使用Python将自己的分析从一次性临时的工作转变为可复用的产品化的代码。这些工作都是基于一份收入数据展开。
  • 运用汽车数据进行可视化分析(Python)这里使用的是强大的编程语言Python。
  • 社交网络分析(Python),向读者展示如何建立、可视化和分析社交网络。
  • 大规模电影推荐(Python)。告诉你如何用Python搭建电影推荐系统。
  • 获取和定位Twitter数据(Python)。向读者展示如何调用Twitter的API获取Twitter用户数据,并绘制用户信息中包含的地理信息数据。
  • 利用NumPy和SciPy优化数值计算(Python)。带领读者领略如何优化Python代码,从而在处理大数据集时节省时间和金钱。

所以你懂了吗?

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


我最近重新拾起了计算机视觉,借助Python的opencv还有face_recognition库写了个简单的图像识别demo,额外定制了一些内容,原本想打包成exe然后发给朋友,不过在这当中遇到了许多小问题,都解决了,记录一下踩过的坑。 1、Pyinstaller打包过程当中出现warning,跟d
说到Pooling,相信学习过CNN的朋友们都不会感到陌生。Pooling在中文当中的意思是“池化”,在神经网络当中非常常见,通常用的比较多的一种是Max Pooling,具体操作如下图: 结合图像理解,相信你也会大概明白其中的本意。不过Pooling并不是只可以选取2x2的窗口大小,即便是3x3,
记得大一学Python的时候,有一个题目是判断一个数是否是复数。当时觉得比较复杂不好写,就琢磨了一个偷懒的好办法,用异常处理的手段便可以大大程度帮助你简短代码(偷懒)。以下是判断整数和复数的两段小代码: 相信看到这里,你也有所顿悟,能拓展出更多有意思的方法~
文章目录 3 直方图Histogramplot1. 基本直方图的绘制 Basic histogram2. 数据分布与密度信息显示 Control rug and density on seaborn histogram3. 带箱形图的直方图 Histogram with a boxplot on t
文章目录 5 小提琴图Violinplot1. 基础小提琴图绘制 Basic violinplot2. 小提琴图样式自定义 Custom seaborn violinplot3. 小提琴图颜色自定义 Control color of seaborn violinplot4. 分组小提琴图 Group
文章目录 4 核密度图Densityplot1. 基础核密度图绘制 Basic density plot2. 核密度图的区间控制 Control bandwidth of density plot3. 多个变量的核密度图绘制 Density plot of several variables4. 边
首先 import tensorflow as tf tf.argmax(tenso,n)函数会返回tensor中参数指定的维度中的最大值的索引或者向量。当tensor为矩阵返回向量,tensor为向量返回索引号。其中n表示具体参数的维度。 以实际例子为说明: import tensorflow a
seaborn学习笔记章节 seaborn是一个基于matplotlib的Python数据可视化库。seaborn是matplotlib的高级封装,可以绘制有吸引力且信息丰富的统计图形。相对于matplotlib,seaborn语法更简洁,两者关系类似于numpy和pandas之间的关系,seabo
Python ConfigParser教程显示了如何使用ConfigParser在Python中使用配置文件。 文章目录 1 介绍1.1 Python ConfigParser读取文件1.2 Python ConfigParser中的节1.3 Python ConfigParser从字符串中读取数据
1. 处理Excel 电子表格笔记(第12章)(代码下载) 本文主要介绍openpyxl 的2.5.12版处理excel电子表格,原书是2.1.4 版,OpenPyXL 团队会经常发布新版本。不过不用担心,新版本应该在相当长的时间内向后兼容。如果你有新版本,想看看它提供了什么新功能,可以查看Open
1. 发送电子邮件和短信笔记(第16章)(代码下载) 1.1 发送电子邮件 简单邮件传输协议(SMTP)是用于发送电子邮件的协议。SMTP 规定电子邮件应该如何格式化、加密、在邮件服务器之间传递,以及在你点击发送后,计算机要处理的所有其他细节。。但是,你并不需要知道这些技术细节,因为Python 的
文章目录 12 绘图实例(4) Drawing example(4)1. Scatterplot with varying point sizes and hues(relplot)2. Scatterplot with categorical variables(swarmplot)3. Scat
文章目录 10 绘图实例(2) Drawing example(2)1. Grouped violinplots with split violins(violinplot)2. Annotated heatmaps(heatmap)3. Hexbin plot with marginal dist
文章目录 9 绘图实例(1) Drawing example(1)1. Anscombe’s quartet(lmplot)2. Color palette choices(barplot)3. Different cubehelix palettes(kdeplot)4. Distribution
Python装饰器教程展示了如何在Python中使用装饰器基本功能。 文章目录 1 使用教程1.1 Python装饰器简单示例1.2 带@符号的Python装饰器1.3 用参数修饰函数1.4 Python装饰器修改数据1.5 Python多层装饰器1.6 Python装饰器计时示例 2 参考 1 使
1. 用GUI 自动化控制键盘和鼠标第18章 (代码下载) pyautogui模块可以向Windows、OS X 和Linux 发送虚拟按键和鼠标点击。根据使用的操作系统,在安装pyautogui之前,可能需要安装一些其他模块。 Windows: 不需要安装其他模块。OS X: sudo pip3
文章目录 生成文件目录结构多图合并找出文件夹中相似图像 生成文件目录结构 生成文件夹或文件的目录结构,并保存结果。可选是否滤除目录,特定文件以及可以设定最大查找文件结构深度。效果如下: root:[z:/] |--a.py |--image | |--cat1.jpg | |--cat2.jpg |
文章目录 VENN DIAGRAM(维恩图)1. 具有2个分组的基本的维恩图 Venn diagram with 2 groups2. 具有3个组的基本维恩图 Venn diagram with 3 groups3. 自定义维恩图 Custom Venn diagram4. 精致的维恩图 Elabo
mxnet60分钟入门Gluon教程代码下载,适合做过深度学习的人使用。入门教程地址: https://beta.mxnet.io/guide/getting-started/crash-course/index.html mxnet安装方法:pip install mxnet 1 在mxnet中使
文章目录 1 安装2 快速入门2.1 基本用法2.2 输出图像格式2.3 图像style设置2.4 属性2.5 子图和聚类 3 实例4 如何进一步使用python graphviz Graphviz是一款能够自动排版的流程图绘图软件。python graphviz则是graphviz的python实