如何进一步缩短Python性能

在这里插入图片描述

1、问题背景

  • 给定一个(x,y)处的节点网格,每个节点有一个值(0…255)从0开始。
  • 有N个输入坐标,每个坐标在(0…x, 0…y)的范围内。
  • 一个值Z,它定义了节点的“邻域”。
  • 增加输入坐标及其邻居节点的值。网格边缘之外的邻居被忽略。
  • 基准案例:1024x1024个节点的网格,400个输入坐标,Z的范围是75个节点。
  • 处理应该是O(xyZ*N)。期望x、y和Z保持在大致与基准案例中的值相同,但输入坐标的数量N可能会增加到100,000。目标是最大程度地减少处理时间。

2、解决方案

  • 使用list comprehension代替内部for循环。
  • 使用map()函数代替外部for循环。
  • 使用静态变量来避免多次查找非局部作用域变量。
  • 建立一个单独的map()操作来将值限制为255。
  • 使用更快的算法来执行计算。例如,使用C扩展。

以下是用Python编写的示例代码来处理网格中的数据:

import time
import numpy as np
import randomdef f2(x, y, n, z):rows = [[0] * x for i in range(y)]for i in range(n):inputX, inputY = (int(x * random.random()), int(y * random.random()))topleft = (inputX - z, inputY - z)for i in range(max(0, topleft[0]), min(topleft[0] + (z * 2), x)):l = max(0, topleft[1])r = min(topleft[1] + (z * 2), y)rows[i][l:r] = [j + (j < 255) for j in rows[i][l:r]]def f3(x, y, n, z):inputs = [(int(x * random.random()), int(y * random.random())) for i in range(n)]rows = map(g, inputs)def g(input):inputX, inputY = inputtopleft = (inputX - 75, inputY - 75)for i in range(max(0, topleft[0]), min(topleft[0] + (75 * 2), 1024)):l = max(0, topleft[1])r = min(topleft[1] + (75 * 2), 1024)rows[i][l:r] = [j + (j < 255) for j in rows[i][l:r]]def f4(x, y, n, z):rows = [[0] * y for i in range(x)]rr = random.randrangeinc = (1).__add__sat = (0xff).__and__for i in range(n):inputX, inputY = rr(x), rr(y)b = max(0, inputX - z)t = min(inputX + z, x)l = max(0, inputY - z)r = min(inputY + z, y)for i in range(b, t):rows[i][l:r] = map(inc, rows[i][l:r])for i in range(x):rows[i] = map(sat, rows[i])def f5(x, y, n, z):# 使用 NumPy 数组rows = np.zeros((x, y), dtype=np.uint8)for i in range(n):inputX, inputY = (int(x * random.random()), int(y * random.random()))topleft = (inputX - z, inputY - z)rows[max(0, topleft[0]):min(topleft[0] + (z * 2), x),max(0, topleft[1]):min(topleft[1] + (z * 2), y)] += 1if __name__ == "__main__":x = 1024y = 1024n = 400z = 75start = time.time()f2(x, y, n, z)end = time.time()print("f2:", end - start)start = time.time()f3(x, y, n, z)end = time.time()print("f3:", end - start)start = time.time()f4(x, y, n, z)end = time.time()print("f4:", end - start)start = time.time()f5(x, y, n, z)end = time.time()print("f5:", end - start)

以上代码展示了如何使用不同的方法来处理网格中的数据,并比较了它们的运行时间。可以看到,使用NumPy数组来处理数据是最快的。

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

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

相关文章

专转本上岸别太老实做这三件事

如果你专转本上岸&#xff0c;千万不要当老实人去做这三件事&#xff0c;真的没有必要&#xff0c;不但浪费时间&#xff0c;还会让你提前进入对未来的迷茫期。建议转本人们一定要知道&#xff0c;首先就是不要过度关注学分。因为转本上岸只有两年&#xff0c;我们属于大三&…

spdlog日志库源码:自定义异常类spdlog_ex

自定义异常类spdlog_ex 标准库异常类&#xff08;std::exception&#xff09;系列&#xff0c;能满足大多数使用异常的场景&#xff0c;但对系统调用异常及错误信息缺乏支持。spdlog通过继承std::exception&#xff0c;扩展对系统调用的支持&#xff0c;实现自定义异常类spdlo…

产教协同|暴雨AI算力赋能传媒实践教学

近日&#xff0c;“第七届传媒实践教学创新研讨会暨中国高校影视学会实验教学专业委员会年会”在美丽的山城重庆成功举办。本次大会以“拥抱AI&#xff0c;融合共生”为主题&#xff0c;吸引了来自全国200多所高校、30多家企业以及700多位大视听实践教学产学研用各界专家、学者…

#php-config的作用#

/usr/local/php/bin/php-config php-config 做什么的 php-config 是一个在 PHP 编译和安装过程中生成的实用程序&#xff0c;它提供了关于 PHP 安装配置的信息。这些信息对于其他软件&#xff08;如扩展模块或绑定库&#xff09;在编译时链接到 PHP 运行时环境非常有用。 具体…

Data Lakehouse:你的下一个数据仓库

作者&#xff1a;张友东 StarRocks TSC member/镜舟科技 CTO 数据分析是现代企业和组织决策过程中不可或缺的一部分&#xff0c;数据分析技术经过数十年的发展&#xff0c;需求场景从 BI 报表到数据探寻、实时预测、用户画像等不断丰富&#xff0c;技术架构经历从数据仓库、数据…

如何进行企业的数字化转型?

“企业数字化转型怎么做&#xff1f;” &#xff0c;类似的文章网上有很多&#xff0c;但大多数内容都写得太高深了&#xff0c;一般人看不懂&#xff0c;也用不上... 作为一个践行者&#xff0c;而不是数字化产品的销售员&#xff0c;我跟你说点你能听得懂的。 1、导入信息化…

【AIGC】GPT-4o技术分析-浅谈

GPT-4o&#xff1a;人工智能技术的全新里程碑 一、引言二、GPT系列版本间的对比分析三、GPT-4o的技术能力分析多模态处理能力速度与性能优化情感理解与表达能力 四、个人整体感受五、结语 一、引言 在人工智能技术的浪潮中&#xff0c;OpenAI再次以其卓越的创新能力引领潮流。近…

Java中的打印流PrintStream 和 PrintWriter

PrintStream和PrintWriter在Java中都是用于打印输出的类&#xff0c;但它们之间存在一些明显的区别。以下是关于这两个类的详细解释和比较&#xff1a; PrintStream 基本特性 PrintStream是一个字节打印流&#xff0c;它继承自FilterOutputStream。 主要操作byte流&#xff0…

15.Redis之持久化

0.知识引入 mysql的事务,有四个比较核心的特性. 1. 原子性 2.一致性 3.持久性 >(和持久化说的是一回事)【把数据存储在硬盘 >持久把数据存储茌内存上>不持久~】【重启进程/重启主机 之后,数据是否存在!!】 4.隔离性~ Redis 是一个 内存 数据库.把数据存储在内存中的…

【张量】由可逆线性变换诱导的具有新张量核范数的低秩张量补全(1)

文章目录 由可逆线性变换诱导的具有新张量核范数的低秩张量补全【Low-rank Tensor Completion with a New Tensor Nuclear Norm Induced by Invertible Linear Transform】摘要1.介绍**2. 由变换基的张量-张量积诱导的新的张量核范数**2.2 基于变换的 T-积 诱导的张量核范数 **…

RFID芯片掼蛋牌:高科技与传统玩法结合,游戏体验焕然一新。

火爆“出圈”的掼蛋&#xff0c;是一种玩法相当鲜明的智力游戏。近年来得到了不少的推广和发展&#xff0c;各地举办了各种掼蛋比赛和活动&#xff0c;吸引了大量的参赛者和观众。此外&#xff0c;一些企业和机构也开始将掼蛋作为一种企业文化或者社交活动的方式&#xff0c;通…

灯下黑”挖出国内知名安全平台某BUF的CSRF漏洞

漏洞复现&#xff1a; 漏洞点在删除文章的地方&#xff0c;首先为了测试先发布一篇文章 发布之后我们可以查看文章&#xff0c;注意url中的一串数字&#xff0c;就是这篇文章的id&#xff0c;如下如&#xff1a; 这里的文章id是“271825”&#xff0c;首先抓一下删除文章的数据…

JavaScript基础(十)

上一篇学了各种数组方法&#xff0c;正好先做个练习回忆一下: 排序并去重 我随便写一组数&#xff0c;要求排好并去掉重复的: var arr [2,8,1,7,2,6,1,5,2,7,6,5]; for (var i0; i<arr.length; i){ for (var ji1; j<arr.length; j){ if(arr[i]arr[j]){ arr.splice(j,1)…

LeetCode 474.一和零

没做出来&#xff0c;最后看了解析&#xff0c;看了半天才懂。 我一开始把这个题当成多重背包来做了&#xff0c;因为有0和1两个参数需要考虑&#xff0c;但是中间很多情况不知道怎么处理。后面看了解析才知道这是个01背包问题&#xff0c;0和1都是一个物品上的属性&#xff0c…

Revit二次开发-WPF ProgressBar 执行程序中显示进度条

Revit开发执行命令时如果时间长,界面会顶住,导致用户误以为程序未响应,解决方法:增加WPF ProgressBar 进度条执行程序中显示进度条,提示命令还是进行中, 实现流程: 新建一个WPF,Window启动时加载一个事件Loaded=“Window_Loaded”,用于显示进度条在WPF后台,新建一个异…

安卓自定义UI组件开发流程

安卓自定义ui组件开发流程 开发安卓自定义UI组件的流程大致可以分为以下几个步骤&#xff1a; 确定需求和设计&#xff1a; 确定需要自定义的UI组件的功能和外观。设计组件的交互逻辑和视觉效果。 创建自定义组件类&#xff1a; 创建一个新的Java类&#xff0c;继承自View、V…

K-means 聚类模型详解

K-means 聚类模型详解 K-means 是一种常用的无监督学习算法&#xff0c;用于将数据集分成 K 个簇。其目标是最小化各个簇内数据点到簇中心的距离平方和。K-means 广泛应用于图像压缩、市场细分、模式识别等领域。 算法步骤 初始化: 随机选择 K 个初始簇中心&#xff08;质心…

Sql入门教程

SQL&#xff0c;全称Structured Query Language&#xff0c;也就是结构化查询语言&#xff0c;它是和数据库沟通的语言。想象一下&#xff0c;数据库是个巨大的仓库&#xff0c;里面放着各种信息&#xff0c;而SQL就是你用来告诉仓库管理员&#xff08;数据库&#xff09;你要做…

gulp入门8:serites

在Gulp中&#xff0c;gulp.series 是一个非常重要的函数&#xff0c;它允许你将多个任务&#xff08;task&#xff09;组合成一个顺序执行的序列。这对于那些需要按照特定顺序执行的任务特别有用。下面是对 gulp.series 的深入研究&#xff0c;包括其用法、特点以及注意事项。 …

Java中的转换流InputStreamReader 和 OutputStreamWriter

在Java的I/O&#xff08;输入/输出&#xff09;库中&#xff0c;InputStreamReader 和 OutputStreamWriter 是两个重要的桥接类&#xff0c;它们被用来在字节流&#xff08;InputStream 和 OutputStream&#xff09;和字符流&#xff08;Reader 和 Writer&#xff09;之间进行转…