这5个代码技巧,让我的 Python 加速了很多倍

news2024/11/17 14:28:32

Python作为一种功能强大的编程语言,因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛:科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发等等。

而在数据科学领域中,Python 是使用最广泛的编程语言,并且其受欢迎程度持续增长。如果也经常需要用Python处理海量数据,就一定会遇到代码运行几十分钟甚至更久的情况。

今天我们会给大家分享5个代码技巧,加速你的Python运行速度,提高Python技能!

文章目录

    • 技术提升
    • 技巧 1:加速 NumPy
    • 技巧 2:优先使用内置函数
    • 技巧 3:使用列表生成式
    • 技巧 4:不要导入不必要的模块
    • 技巧 5:使用numba

技术提升

技术要学会分享、交流,不建议闭门造车。一个人走的很快、一堆人可以走的更远。

好的技术文章离不开粉丝的分享、推荐,资料干货、资料分享、数据、技术交流提升,均可加交流群获取,群友已超过2000人,添加时切记的备注方式为:来源+兴趣方向,方便找到志同道合的朋友。

方式①、添加微信号:pythoner666,备注:来自 CSDN + python
方式②、微信搜索公众号:Python学习与数据挖掘,后台回复:加群

技巧 1:加速 NumPy

NumPy是一个可高效处理数组的 Python 库,它还提供快速和优化的矢量化操作。但!它不支持并行处理。作为 NumPy 的替代品,我们可以使用NumExpr。NumExpr 的性能明显优于 NumPy,因为它支持多线程。此外,它避免了为中间结果分配内存。

pip install numexpr

在交互式环境中输入如下命令:

import numpy as np
import numexpr as ne
import timeit

var1 = np.random.random(2**27)
var2 = np.random.random(2**27)

%timeit np.sin(var1) / np.cos(var2)
%timeit ne.evaluate("sin(var1) / cos(var2)")

输出:

在这里插入图片描述

根据执行结果,使用 NumExpr 大约快 4 倍。当你有大型数组需要处理时,NumExpr 效果最佳。

技巧 2:优先使用内置函数

Python 内置函数比自定义实现快得多,因此我们要优先使用它们。

举个例子:

在这里插入图片描述

在上面的代码中,我们将一个包含四个条目的列表复制了 1000 万次,因此我们得到了一个包含 4000 万个条目的列表,然后我们将列表中的字符串转换为小写。

可以看到结果,使用内置函数的速度提高了大约 23倍。

技巧 3:使用列表生成式

经常使用列表和for循环来存储计算结果,其实使用列表生成式能更快。

在交互式环境中输入如下命令:

import numpy as np
from time import perf_counter

result_list_loop = []
result_list_com = []

number_round = 10000000

start = perf_counter()
for i in range(number_round):
    result_list_loop.append(i*i)
print(perf_counter()-start)

start = perf_counter()
result_list_com = [i*i for i in range(number_round)]
print(perf_counter()-start)

print(result_list_com[10])

列表生成式是一种基于其他iterable(如集合、元组、其他列表等)创建列表的方法,大家感兴趣可以自行了解一下。

图片

技巧 4:不要导入不必要的模块

估计大家可能已经多次听到这个技巧,但它可以显着提高代码的性能。有时候没有必要导入整个库,毕竟我们通常只需要它的某些功能。

这里我们使用math模块作为例子:

import math
from time import perf_counter

start = perf_counter()
variable = math.exp(7)
print(perf_counter()-start)

接着我们不导入整个math模块,只使用需要的 exp() 函数。

from math import exp
from time import perf_counter

start = perf_counter()
variable = exp(7)
print(perf_counter()-start)

两次运行时间比较:

在这里插入图片描述

技巧 5:使用numba

Numba 是一款为 python 打造的、专门针对 Numpy 数组循环计算场景的即时编译器。

在交互式环境中输入如下命令:

df = pd.DataFrame({'x':np.random.rand(10000)})
                    
def calculate(x):
    return np.sum(x)/x.size

输出分别Numba和低级语言CPython进行加速:

在这里插入图片描述

结果可以看到,我们的自定义函数在使用engine='numba'engine='cython' 后,速度明显加快!

今天我们给大家分享了5个代码技巧,加速你的Python运行速度,提高Python技能!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/349180.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【Flink】Flink时间语义详解

简介 在流处理中,时间是一个非常核心的概念,是整个系统的基石。我们经常会遇到这样的需求:给定一个时间窗口,比如一个小时,统计时间窗口内的数据指标。那如何界定哪些数据将进入这个窗口呢?在窗口的定义之…

【C语言】程序环境和预处理|预处理详解|定义宏(下)

主页:114514的代码大冒 qq:2188956112(欢迎小伙伴呀hi✿(。◕ᴗ◕。)✿ ) Gitee:庄嘉豪 (zhuang-jiahaoxxx) - Gitee.com 文章目录 目录 文章目录 前言 2.5带副作用的宏参数 2.6宏和函数的对比 3#undef ​编辑 4 命令行定义…

直播 | StarRocks 实战系列第二期--导入优化&问题排查

2023 年开春, StarRocks 社区重磅推出入门级实战系列直播,手把手带你从 Zero to Hero 成为一个 “StarRocks Pro”!通过实际操作和应用场景的结合,我们将帮你系统性地学习 StarRocks 这个当今最热门的开源 OLAP 数据库。本次&…

WebSocket+xterm+springboot+vue 实现 xshell 操作linux终端功能

效果图 1.工具介绍与安装 1.1 xterm.js xterm 是一个使用 TypeScript 编写的前端终端组件,可以直接在浏览器中实现一个命令行终端应用。Xterm.js 适用于大多数终端应用程序,如 bash,vim 和 tmux,这包括对基于curses的应用程序和…

反击爬虫,前端工程师的脑洞可以有多大?

1. 前言对于一张网页,我们往往希望它是结构良好,内容清晰的,这样搜索引擎才能准确地认知它。而反过来,又有一些情景,我们不希望内容能被轻易获取,比方说电商网站的交易额,教育网站的题目等。因为…

港科夜闻|广州市市长郭永航先生与香港科大校董会廖长城先生一行举行座谈交流...

关注并星标每周阅读港科夜闻建立新视野 开启新思维1、广州市市长郭永航先生与香港科大校董会廖长城先生一行举行座谈交流。2月9日上午,双方就推进香港科技大学(广州)建设发展进行深入交流,并一致表示,将全力推动落实《南沙方案》中“打造高等…

【基础篇】一文掌握css的盒子模型(margin、padding)

1、CSS 盒子模型(Box Model) 所有HTML元素可以看作盒子,在CSS中,"box model"这一术语是用来设计和布局时使用。CSS盒模型本质上是一个盒子,封装周围的HTML元素,它包括:边距,边框,填充,和实际内容。盒模型允许我们在其它元素和周围元素边框之间的空间放置元素…

文献的阅读的习惯与方法

文献阅读是每个研究人员都要做的事情,然而虽然每个人都在阅读,但是每个人的阅读效率不一样,总结有效的方式是非常重要的。本笔记将梳理我在阅读文献中的方法和所在其中的关注点。 阅读文献有两种目的,第一种目的是日常阅读和学习…

ThinkPHP5美食商城系统

有需要请私信或看评论链接哦 可远程调试 ThinkPHP5美食商城系统一 介绍 此美食商城系统基于ThinkPHP5框架开发,数据库mysql,前端bootstrap。系统角色分为用户和管理员。用户注册登录后可购买美食,个人中心,评论和反馈等&#xff…

一手教你如何搭建Hadoop基于Zookeeper的集群(5台主机)

文章目录一、设计集群图二、准备五台虚拟机2.1、下载安装文件2.2、创建虚拟机2.3、配置网络2.4、修改主机名称2.5、关闭防火墙2.6、同步时间2.7、设置/etc/hosts文件2.8、设置免密登录2.9、为后面可以主备替换安装psmisc三、安装JDK3.1、安装jdk3.2、测试jdk是否安装成功3.3、将…

Android笔记:动画

文章目录1.View Animation(视图动画)1.1 Tween Animation(补间动画)Animation 继承属性透明度alpha缩放scale移动translate旋转rotateset标签Animation父类共有函数1.2Frame Animation (逐帧动画)2.Propert…

spark3.0源码分析-driver-executor心跳机制

前言 driver和executor心跳机制分为两种机制: 1、executor发送心跳机制 2、driver接受心跳机制 至于为何要分为两种,原因是在分布式场景中,服务的稳定性是无法保障的,例如executor宕机后无法发送心跳,故driver端需要…

3、按键扫描检测处理

说明:本文处理按键的短按、长按检测执行,非矩阵按键 硬件可以类似如下连接即可,无需放置上下拉电阻; 按键动作分长按、短按(弹起时执行)两种 按下不放执行长按,但松开按键时不予执行短按函数 多个按键可以同时操作 按…

内网渗透(三十四)之横向移动篇-IPC配合计划任务横向移动

系列文章第一章节之基础知识篇 内网渗透(一)之基础知识-内网渗透介绍和概述 内网渗透(二)之基础知识-工作组介绍 内网渗透(三)之基础知识-域环境的介绍和优点 内网渗透(四)之基础知识-搭建域环境 内网渗透(五)之基础知识-Active Directory活动目录介绍和使用 内网渗透(六)之基…

Altium Designer输出生产文件Gerber、IPC、NC Drill、坐标文件--AD

AD软件版本:22.2.1 gerber文件输出共有两部分: 1、Gerber Files:铜皮 和 外形分别导出 2、Nc Drill Files 分3次导出 一、Gerber Files 导出2次 设定原点 ** Edit->Origin->Set** 一般板边左下角为原点,可以根据自己板子形状确定 导…

使用MAT工具分析OOM问题

1、添加jvm参数 保存堆内存快照 -XX:HeapDumpOnOutOfMemoryError -XX:HeapDumpPath存放路径 2、下载MAT工具 下载地址: https://www.eclipse.org/mat/downloads.php 3、启动如果遇到 Version 1.8.0 102 of the JVM is not suitable for this product, Version: 11…

2023LaCTFWriteup

文章目录2023LaCTFEBEa hackers notes2023LaCTF 前言: 累了,没有话,下次一定 EBE I was trying to send a flag to my friend over UDP, one character at a time, but it got corrupted! I think someone else was messing around with me…

【C++】类与对象(三)

前言 本章我们接替前一章继续深入理解类的默认成员函数,赋值重载,取地址重载,及const取地址操作符重载 但是在讲剩下的三个默认成员函数之前,我们要先来了解运算符重载,因为赋值重载,取地址重载&#xff0c…

Compose-Navigation简单案例上手

Navigation 快速上手 下面案例简要展示使用 Compose 版本的 Navigation 库来实现两个页面之间的跳转 这是完整的结构(忽略掉红线划过的那个包) 安装适用于 kotlin 的 navigation 依赖 dependencies {implementation("androidx.navigation:navigati…

兼职任务平台收集(一)分享给有需要的朋友们

互联网时代,给人们带来了很大的便利。信息交流、生活缴费、足不出户购物、便捷出行、线上医疗、线上教育等等很多。可以说,网络的时代会一直存在着。很多人也在互联网上赚到了第一桶金,这跟他们的努力和付出是息息相关的。所谓一份耕耘&#…