当前位置: 首页 > news >正文

5个代码技巧,加速你的Python

5个代码技巧,加速你的Python

人生苦短,快学Python!

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

而在数据科学领域中,Python 是使用最广泛的编程语言,并且其受欢迎程度持续增长。如果也经常需要用Python处理海量数据,就一定会遇到代码运行几十分钟甚至更久的情况。今天我们会给大家分享7个代码技巧,加速你的Python运行速度,提高Python技能!

技巧 1:加速 NumPy

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

pip install numexpr

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

import numpy as np
import numexpr as ne
import timeitvar1 = 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倍。

关于内置函数的使用,可以参考我们之前分享的文章:

Python中堪称神仙的6个内置函数

Python中最常用的10个内置函数

技巧 3:使用列表生成式

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

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

import numpy as np
from time import perf_counterresult_list_loop = []
result_list_com = []number_round = 10000000start = 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])

输出:

如上图所示,使用列表生成式能快3倍。

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

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

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

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

import math
from time import perf_counterstart = perf_counter()
variable = math.exp(7)
print(perf_counter()-start)

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

from math import exp
from time import perf_counterstart = 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进行加速:

image-20230118174746078

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

人生苦短,快学Python!

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


自定义函数 使用 engine=‘numba’ 或 engine=‘cython’ 后,速度明显加快

使用自带函数,速度明显比使用自定义函数更快,此时加上 engine=‘numba’ 或 engine=‘cython’ 没有加速效果。

相关文章:

5个代码技巧,加速你的Python

5个代码技巧,加速你的Python 人生苦短,快学Python! Python作为一种功能强大的编程语言,因其简单易学而受到很多初学者的青睐。它的应用领域又非常广泛:科学计算、游戏开发、爬虫、人工智能、自动化办公、Web应用开发…...

字节跳动软件测试岗,前两面过了,第三面HR天坑!竟然跟我说……

阎王易见,小鬼难缠。我一直相信这个世界上好人居多,但是也没想到自己也会在阴沟里翻船。我感觉自己被字节跳动的HR坑了。在这里,我只想告诫大家,offer一定要拿到自己的手里才是真的,口头offer都是不牢靠的,…...

[数据分析与可视化] Python绘制数据地图1-GeoPandas入门指北

本文主要介绍GeoPandas的基本使用方法,以绘制简单的地图。GeoPandas是一个Python开源项目,旨在提供丰富而简单的地理空间数据处理接口。GeoPandas扩展了Pandas的数据类型,并使用matplotlib进行绘图。GeoPandas官方仓库地址为:GeoP…...

ChatGPT加强版GPT-4面世,打工人的方式将被颠覆

🔗 运行环境:chatGPT,GPT-4 🚩 撰写作者:左手の明天 🥇 精选专栏:《python》 🔥 推荐专栏:《算法研究》 #### 防伪水印——左手の明天 #### 💗 大家好&#…...

Python逆向及相关知识

今天第二次看见python字节码的逆向题,然后发现了一个介绍Python逆向的文章,所以把文章里的内容简单整理记录一下。 文章参考:https://www.cnblogs.com/blili/p/11799398.html Python运行原理: 一.什么是Python Python 是一种解…...

Python基础语法、注意点加实例全解

本篇文章我们讲解Python最基础语法,包含:数据类型、注释、变量、类型转换、命名规范、运算符、字符串拼接、字符串格式化、if条件判断、while循环、for循环、函数、读取文件、写入文件、异常捕获、包导入等。通过讲解语法注意事项实例代码详解&#xff0…...

ETH RPC搭建

配置选择先是看了aws、谷歌云、阿里云这个配置都要1-2wrmb一个月,太贵了问了很多朋友,打算用hetzner,50欧一个月足以我选的配置:64gb,2tb ssd开好后在邮箱收到信息链接后按以下步骤安装系统:https://0o0.me…...

南京邮电大学数据库第一次课后作业

1.单选题 (5分) (B)是存储在计算机内有结构的数据的集合。 (A)数据库系统 (B)数据库 (C)数据库管理系统 (D)数据结构 2.单选题 (5分) 数据库的特点之一是数据的共享,严格的讲,这里的…...

近期投简历、找日常实习的一些碎碎念(大二---测试岗)

嘿嘿嘿,我又回来了,相信不少兄弟已经发现我似乎已经断更了好久,哈哈,我是尝试去找实习,投简历面试去了。 先说一下背景。 目录 背景 求职进行中 简历 投递和沟通 收获和感受 背景 博主,大二软件工程…...

ThreadLocal的使用

1. ThreadLocal介绍 ThreadLocal顾名思义,就是线程的本地变量,只有当前线程可见,对其他线程来说是封闭且隔离的。每一个线程为自己本身创建ThreadLocal变量,只有当前线程可以访问,其他的线程不可以,从根源…...

Java ~ Reference【总结】

一 概述 简介 在JDK1.2之前,Java中引用的定义是十分传统的:如果引用类型的变量中存储的数值代表的是另一块内存的起始地址,就称这块内存代表着一个引用。在这种定义之下,一个对象只有被引用和没有被引用两种状态。 实际上&#xf…...

最快方法求最长上升子序列(LIS)+最长公共子序列(LCS)模板(C/C++)

目录 1 LIS算法(最长上升子序列) 1.1 简介 1.2 代码 1.3 相关解释 2 LCS算法(最长公共子序列) 2.1 简介 2.2 代码(动态规划,时间复杂度O(nlogn)) 2.3 特殊…...

012+limou+C语言深入知识——(4)“结构体”与“枚举体”与“联合体”

一、结构体 1、结构体基础 (1)结构体完全声明 struct tag {member-list; }variable-list;//描述一个人 struct people {char name[10];//人名int age;//年龄int idnumber;//身份证 };(2)结构体不完全声明(匿名结构体…...

Canvas百战成神-圆(1)

Canvas百战成神-圆 初始化容器 <canvas id"canvas"></canvas>canvas{border: 1px solid black; }让页面占满屏幕 *{margin: 0;padding: 0; } html,body{width: 100%;height: 100%;overflow: hidden; } ::-webkit-scrollbar{display: none; }初始化画笔…...

详解分库分表设计

详解分库分表设计 背景 ​ 在传统的单机数据库架构中&#xff0c;所有数据都存储在同一个数据库中&#xff0c;随着业务规模的不断扩大&#xff0c;数据量和并发量也会越来越大&#xff0c;这会给数据库的性能和可用性带来挑战。此外&#xff0c;当单机数据库的容量达到瓶颈时…...

动态规划-基础(斐波那契数、爬楼梯、使用最小花费爬楼梯、不同路径、不同路径II、整数拆分、不同的二叉搜索树)

动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划是最有效的。所以动态规划中每一个状态一定是由上一个状态推导出来的。动态规划问题&#xff0c;五步走&#xff1a;状态定义&am…...

深入理解WebSocket协议

“ 一直以来对WebSocket仅停留在使用阶段&#xff0c;也没有深入理解其背后的原理。当看到 x x x was not upgraded to websocket&#xff0c;我是彻底蒙了&#xff0c;等我镇定下来&#xff0c;打开百度输入这行报错信息&#xff0c;随即看到的就是大家说的跨域&#xff0c;或…...

Vector的扩容机制

到需要扩容的时候&#xff0c;Vector会根据需要的大小&#xff0c;创建一个新数组&#xff0c;然后把旧数组的元素复制进新数组。 我们可以看到&#xff0c;扩容后&#xff0c;其实是一个新数组&#xff0c;内部元素的地址已经改变了。所以扩容之后&#xff0c;原先的迭代器会…...

22讲MySQL有哪些“饮鸩止渴”提高性能的方法

短连接风暴 是指数据库有很多链接之后只执行了几个语句就断开的客户端&#xff0c;然后我们知道数据库客户端和数据库每次连接不仅需要tcp的三次握手&#xff0c;而且还有mysql的鉴权操作都要占用很多服务器的资源。话虽如此但是如果连接的不多的话其实这点资源无所谓的。 但是…...

10.0自定义SystemUI下拉状态栏和通知栏视图(六)之监听系统通知

1.前言 在进行rom产品定制化开发中,在10.0中针对systemui下拉状态栏和通知栏的定制UI的工作开发中,原生系统的下拉状态栏和通知栏的视图UI在产品开发中会不太满足功能, 所以根据产品需要来自定义SystemUI的下拉状态栏和通知栏功能,首选实现的就是下拉通知栏左滑删除通知的部…...

保姆级教程:在STM32F103上从零移植FreeModbus V1.6(RTU模式)

保姆级教程&#xff1a;在STM32F103上从零移植FreeModbus V1.6&#xff08;RTU模式&#xff09; Modbus协议作为工业自动化领域的"普通话"&#xff0c;其开源实现FreeModbus凭借轻量级和可移植性成为嵌入式开发者的首选。本文将手把手带你在STM32F103C8T6开发板上完成…...

别再问怎么给QQ机器人加功能了!手把手教你用Nonebot2写一个天气查询插件(附完整代码)

NoneBot2实战&#xff1a;从零构建智能QQ机器人天气查询插件 在当今即时通讯生态中&#xff0c;智能机器人已成为提升社群互动效率的利器。本文将深入探讨如何基于Python的NoneBot2框架&#xff0c;为QQ机器人开发一个功能完备的天气查询插件。不同于基础教程&#xff0c;我们聚…...

Linux dmesg实战指南:从内核消息解析到故障排查(附实用技巧与常见问题)

1. 初识dmesg&#xff1a;你的Linux系统健康检查仪 刚接触Linux系统管理时&#xff0c;我总把dmesg当成"高级版系统日志"。直到有次服务器突然宕机&#xff0c;才发现这个命令简直就是系统故障的"黑匣子"。想象一下&#xff0c;当你的电脑突然蓝屏&#xf…...

Audio2Face深度解析:音频驱动面部动画的技术架构与实战指南

Audio2Face深度解析&#xff1a;音频驱动面部动画的技术架构与实战指南 【免费下载链接】FACEGOOD-Audio2Face http://www.facegood.cc 项目地址: https://gitcode.com/gh_mirrors/fa/FACEGOOD-Audio2Face 在虚拟数字人快速发展的今天&#xff0c;如何让虚拟角色拥有自然…...

WebGL开发者必备:用RenderDoc旧版本抓帧调试的完整避坑指南(附DEBUG_CHROME.bat脚本)

WebGL开发者必备&#xff1a;用RenderDoc旧版本抓帧调试的完整避坑指南&#xff08;附DEBUG_CHROME.bat脚本&#xff09; 最近在WebGL开发中遇到一个棘手问题&#xff1a;最新版RenderDoc已经禁止了对Chrome等浏览器的抓帧功能。这对于正在学习图形学课程&#xff08;比如GAMES…...

5分钟解锁跨平台微信:Docker容器化方案全攻略

5分钟解锁跨平台微信&#xff1a;Docker容器化方案全攻略 【免费下载链接】docker-wechat 在docker里运行wechat&#xff0c;可以通过web或者VNC访问wechat 项目地址: https://gitcode.com/gh_mirrors/docke/docker-wechat 还在为Linux系统无法使用微信而烦恼吗&#xf…...

RenderDoc实战:5分钟搞定OpenGL性能瓶颈定位(附Android联调技巧)

RenderDoc实战&#xff1a;5分钟定位OpenGL性能瓶颈的完整指南 移动端图形开发最令人头疼的瞬间&#xff0c;莫过于看到测试报告上"FPS波动大"的红色标记&#xff0c;却不知道从哪开始排查。上周团队里新来的工程师花了三天时间逐行检查着色器代码&#xff0c;最后发…...

DAMO-YOLO实战:搭建教育科研AI视觉实验平台

DAMO-YOLO实战&#xff1a;搭建教育科研AI视觉实验平台 1. 教育科研中的AI视觉需求 在教育科研领域&#xff0c;视觉AI技术正成为重要的研究工具。传统计算机视觉实验平台往往面临部署复杂、性能有限、交互体验差等问题。DAMO-YOLO智能视觉探测系统为解决这些问题提供了创新方…...

告别CTex!TeX Live+Texstudio组合安装避坑指南(Windows/Mac双平台)

告别CTex&#xff01;TeX LiveTexstudio组合安装避坑指南&#xff08;Windows/Mac双平台&#xff09; 如果你曾经使用过CTex套装&#xff0c;可能会被其"开箱即用"的便利性所吸引。但当你需要跨平台协作或追求更灵活的定制时&#xff0c;TeX LiveTexstudio的组合无疑…...

usearch的内存泄漏自动化测试:在CI中集成泄漏检测

usearch的内存泄漏自动化测试&#xff1a;在CI中集成泄漏检测 【免费下载链接】usearch Fastest Open-Source Search & Clustering engine for Vectors & &#x1f51c; Strings in C, C, Python, JavaScript, Rust, Java, Objective-C, Swift, C#, GoLang, and Wolf…...