Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >Python新建序列,怎么写更快

Python新建序列,怎么写更快

作者头像
Crossin先生
发布于 2024-02-26 13:26:29
发布于 2024-02-26 13:26:29
30600
代码可运行
举报
运行总次数:0
代码可运行

大家好,欢迎来到 Crossin的编程教室~

一组1000万个0~100的整数序列,用它来生成一个新的序列,要求如果原本序列中是奇数就不变,如果是偶数就变成原来的一半。

你会怎么写?

来看几份参考答案:

青铜:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def for_method(data):
    result = []
    for x in data:
        if x % 2 == 0:
            result.append(x // 2)
        else:
            result.append(x)
    return result

(自测耗时:0.95秒)

新建一个空列表,for循环遍历原列表,依次判断每个元素,如果能被2整除就除以2添加进新列表,否则直接添加进新列表。

白银:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def lc_method(data):
    return [x if x % 2 else x // 2 for x in data]

(自测耗时:0.75秒)

通过列表解析式生成新列表,不仅代码更简洁明了,耗时还变少了。

黄金:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def numpy_method(data):
    arr = np.array(data)
    return np.where(arr % 2 == 0, arr // 2, arr).tolist()

(自测耗时:0.90秒)

用numpy的where方法生成新的数组。看起来效率好像还不如列表解析式嘛?这是因为大部分时间都花在了列表和ndarray的转换上。如果这组序列本身就用numpy的数组来存储的话:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
def numpy_array_method(data):
    return np.where(data % 2 == 0, data // 2, data)

(自测耗时:0.32秒)

速度直接碾压列表解析式。

王者:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
@numba.jit(nopython=True)
def numba_method(data):
    result = np.copy(data)
    for i in range(len(data)):
        if result[i] % 2 == 0:
            result[i] //= 2
    return result

(自测耗时:0.65秒)

还是用for循环,不过给函数加上一个装饰器,表示用Numba JIT编译,这个看起来平平无奇的写法会有什么效果呢?好像也没有比直接用numpy快多少嘛?

别急,让我们加大剂量,把序列长度调整到1亿,优势就体现出来了。(numba:1.21秒 vs numpy:3.04秒)

你还有其他写法吗?

作者:Crossin的编程教室

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-02-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Crossin的编程教室 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python可以比C++更快,你不信?
Python 是一个用途非常广泛的编程语言,拥有成千上万的第三方库,在人工智能、机器学习、自动化等方面有着广泛的应用,众所周知,Python 是动态语言,有全局解释器锁,比其他静态语言要慢,也正是这个原因,你也许会转向其他语言如 Java、C++,不过先等等,今天分享一个可以让 Python 比 C++ 还要快的技术,看完再决定要不要转吧。
somenzz
2021/04/16
1.1K0
Python Numpy性能提升的利器Numa优化技巧
在数据分析和科学计算中,Python和Numpy是非常流行的工具组合。然而,随着数据量的增加,Python解释器在处理大规模数组时的性能可能无法满足需求。为了提升Python代码的执行效率,Numba成为了一个强大的工具。Numba是一个基于LLVM的即时编译器,它可以将Python代码编译为高效的机器代码,从而极大地提升Numpy数组操作的性能。
sergiojune
2024/10/21
3900
Python Numpy性能提升的利器Numa优化技巧
Python 提速大杀器之 numba 篇
你是不是曾经有这样的苦恼,python 真的太好用了,但是它真的好慢啊(哭死) ; C++ 很快,但是真的好难写啊,此生能不碰它就不碰它。老天啊,有没有什么两全其美的办法呢?俗话说的好:办法总是比困难多,大家都有这个问题,自然也就有大佬来试着解决这个问题,这就请出我们今天的主角: numba
OpenMMLab 官方账号
2022/01/18
3.1K0
Python加速运行技巧
Python 是一种脚本语言,相比 C/C++ 这样的编译语言,在效率和性能方面存在一些不足。但是,有很多时候,Python 的效率并没有想象中的那么夸张。本文对一些 Python 代码加速运行的技巧进行整理。
小萌哥
2020/07/24
1.3K0
使用numba加速python科学计算
python作为一门编程语言,有非常大的生态优势,但是其执行效率一直被人诟病。纯粹的python代码跑起来速度会非常的缓慢,因此很多对性能要求比较高的python库,需要用C++或者Fortran来构造底层算法模块,再用python进行上层封装的方案。在前面写过的这篇博客中,介绍了使用f2py将fortran代码编译成动态链接库的方案,这可以认为是一种“事前编译”的手段。但是本文将要介绍一种即时编译(Just In Time,简称JIT)的手段,也就是在临近执行函数前,才对其进行编译。以下截图来自于参考链接4,讲述了关于常见的一些编译场景的区别:
DechinPhy
2021/05/21
2.1K0
[Python技巧]如何加快循环操作和Numpy数组运算速度
在 24式加速你的Python中介绍对循环的加速方法中,一个办法就是采用 Numba 加速,刚好最近看到一篇文章介绍了利用 Numba 加速 Python ,文章主要介绍了两个例子,也是 Numba 的两大作用,分别是加速循环,以及对 Numpy 的计算加速。
kbsc13
2019/08/16
10.2K0
【图像配准】图像融合再探索/图像像素点遍历加速
在我先前的博文【图像配准】多图配准/不同特征提取算法/匹配器比较测试中,提到了图像融合的一种方式,相关代码如下:
zstar
2023/02/16
8370
numba,让你的Python飞起来!
python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
派大星的数据屋
2022/04/02
1.2K0
numba,让你的Python飞起来!
numba,让你的Python飞起来!
python由于它动态解释性语言的特性,跑起代码来相比java、c++要慢很多,尤其在做科学计算的时候,十亿百亿级别的运算,让python的这种劣势更加凸显。
Python进阶者
2019/09/17
1.4K0
numba,让你的Python飞起来!
Pandas 2.2 中文官方教程和指南(二十三)
在本教程的这一部分中,我们将研究如何加速在 pandas 的DataFrame上操作的某些函数,使用 Cython、Numba 和pandas.eval()。通常,使用 Cython 和 Numba 可以比使用pandas.eval()提供更大的加速,但需要更多的代码。
ApacheCN_飞龙
2024/05/24
6070
Pandas 2.2 中文官方教程和指南(二十三)
强化学习技巧五:numba提速python程序
numba是一款可以将python函数编译为机器代码的JIT编译器,经过numba编译的python代码(仅限数组运算),其运行速度可以接近C或FORTRAN语言。
汀丶人工智能
2022/12/21
1.1K0
强化学习技巧五:numba提速python程序
Python的GPU编程实例——近邻表计算
GPU加速是现代工业各种场景中非常常用的一种技术,这得益于GPU计算的高度并行化。在Python中存在有多种GPU并行优化的解决方案,包括之前的博客中提到的cupy、pycuda和numba.cuda,都是GPU加速的标志性Python库。这里我们重点推numba.cuda这一解决方案,因为cupy的优势在于实现好了的众多的函数,在算法实现的灵活性上还比较欠缺;而pycuda虽然提供了很好的灵活性和相当高的性能,但是这要求我们必须在Python的代码中插入C代码,这显然是非常不Pythonic的解决方案。因此我们可以选择numba.cuda这一解决方案,只要在Python函数前方加一个numba.cuda.jit的修饰器,就可以在Python中用最Python的编程语法,实现GPU的加速效果。
DechinPhy
2021/09/08
2K0
用 Numba 加速 Python 代码,变得像 C++ 一样快
注意: 这篇文章的 Jupyter Notebook 代码在我的 Github 上:SpeedUpYourAlgorithms-Numba
昱良
2019/07/04
2.9K0
用 Numba 加速 Python 代码,变得像 C++ 一样快
NumPy 高级教程——并行计算
并行计算是在多个处理单元上同时执行计算任务的方法,以提高程序的性能。在 NumPy 中,可以使用一些工具和技术来进行并行计算,充分利用多核处理器的优势。在本篇博客中,我们将深入介绍 NumPy 中的并行计算,并通过实例演示如何应用这些技术。
Echo_Wish
2024/01/08
1.6K0
Python NumPy缓存优化与性能提升
NumPy 是 Python 中进行科学计算和数据处理的核心库,其强大的多维数组操作功能让其在计算密集型任务中表现优异。然而,当处理大规模数据时,性能问题可能成为瓶颈。合理地利用 NumPy 的缓存机制和优化策略,可以显著提升计算效率。
sergiojune
2024/12/23
3420
Python NumPy缓存优化与性能提升
利用numba給Python代码加速 [1]
Numba @jit 装饰器有两种编译模式, Nopython 模式和Object 模式。nopython编译模式的行为本质上是编译修饰后的函数,使其完全运行而不需要Python解释器的参与。这是使用Numba jit装饰器的推荐和最佳实践方法,因为它可以获得最佳性能。@jit(nopython=True) 等效于@njit()。
用户6021899
2022/01/10
1.8K0
利用numba給Python代码加速 [1]
Python | 加一行注释,让你的程序提速10+倍!numba十分钟上手指南
之前的文章《源代码如何被计算机执行》已经提到计算机只能执行二进制的机器码,C、C++等编译型语言依靠编译器将源代码转化为可执行文件后才能运行,Python、Java等解释型语言使用解释器将源代码翻译后在虚拟机上执行。对于Python,由于解释器的存在,其执行效率比C语言慢几倍甚至几十倍。
PP鲁
2019/12/26
7.8K0
[python]numba安装后测试代码
​主要任务是有两组bboxs,进行匹配,计算iou阈值,如果直接用for循环,需要写两个for循环,时间复杂度还是很大的 因此尝试使用numba对循环进行加速,具体代码如下:
云未归来
2025/07/17
630
优化Python代码性能的实用技巧
在编写Python代码时,性能优化是一个重要的考虑因素。今天我将介绍一些实用的技巧,帮助大家优化Python代码性能,并提供详细的代码示例。
华科云商小彭
2023/09/05
2900
优化Python代码性能的实用技巧
让python快到飞起-numba加速
python是一门高效动态编程语言,由于其采用简洁明了的语法以及灵活性深受大家欢迎。但是,这既是它最大的优势,也是最大的劣势。它的灵活性和无类型的高级语法可能会导致数据和计算密集型程序的性能不佳,因为运行本地编译代码要比运行动态解释代码快很多倍。
自学气象人
2022/11/02
1K0
让python快到飞起-numba加速
相关推荐
Python可以比C++更快,你不信?
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验