如何进一步缩短Python性能

news2024/11/17 5:54:19

在这里插入图片描述

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 random

def 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 = input
    topleft = (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.randrange
    inc = (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)] += 1

if __name__ == "__main__":
    x = 1024
    y = 1024
    n = 400
    z = 75

    start = 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.coloradmin.cn/o/1713721.html

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

相关文章

Android下HWC以及drm_hwcomposer普法((上)

Android下HWC以及drm_hwcomposer普法((上) 引言 按摩得全套&#xff0c;错了&#xff0c;做事情得全套&#xff0c;普法分析也是如此。drm_hwcomposer如果对Android图形栈有一定研究的童鞋们应该知道它是Android提供的一个的图形后端合成处理HAL模块的实现。但是在分析这个之前…

图像去雾并与其他非物理模型进行对比

matlab clear clc close all imgimread( scene1.jpg);subplot(221),imshow(uint8(img)), title(原始低照度图像”);img(::,1)255-img(::1); img(::,2)255-img(:2); img(:,:3)255-img(: 3); szsize(img); wsZ(2); hsz(1); %计算RGB取最小值后的图像darkl dark l zeros(h,w); for…

2024-2025年跨境电商展览会计划表:共筑未来跨境行业的繁荣

-----------------------------2024年跨境电商展计划如下---------------------------- 2024年&#xff0c;2025年国内跨境电商行业将迎来一系列重大的展会活动&#xff0c;是企业展示品牌、交流趋势、拓展商机的重要平台。全国各地展会排期信息现已出炉&#xff0c;记得收藏哦…

BGP路由策略实验

一、实验拓扑 二、IP分配(骨干) R1&#xff1a; 0/0/0 15.0.0.1 24 0/0/1 18.0.0.2 24 0/0/2 19.0.0.1 24 R2: 0/0/0 16.0.0.1 24 0/0/1 15.0.0.2 24 R3: 0/0/0 17.0.0.2 24 0/0/1 18.0.0.1 24 R4: 0/0/0 16.0…

【Paddle】稀疏计算的使用指南 稀疏ResNet的学习心得 (2) + Paddle3D应用实例稀疏 ResNet代码解读 (1.6w字超详细)

【Paddle】稀疏计算的使用指南 & 稀疏ResNet的学习心得 Paddle3D应用实例稀疏 ResNet代码解读 写在最前面一、稀疏格式简介1. COO&#xff08;Coordinate Format&#xff09;2. CSR&#xff08;Compressed Sparse Row Format&#xff09; 二、Paddle稀疏张量支持1. 创建 C…

34岁嵌入式开发工程师的出路在哪儿?

作为一个从事智能穿戴行业11年的资深从业者&#xff0c;您积累了丰富的技术和经验&#xff0c;IT行业内有很多发展机会和出路可以选择&#xff0c;以下是一些建议供参考&#xff1a;刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式的资料从专业入门到…

JUC从实战到源码:CompletableFuture详细学习

【JUC】- CompletableFuture详细学习 &#x1f604;生命不息&#xff0c;写作不止 &#x1f525; 继续踏上学习之路&#xff0c;学之分享笔记 &#x1f44a; 总有一天我也能像各位大佬一样 &#x1f3c6; 博客首页 怒放吧德德 To记录领地 &#x1f31d;分享学习心得&#xf…

elementUI type=“selection“多选框选中 删除 回显 赋值问题 回显数组改变选中状态未改变

业务需求&#xff1a; 点击查询弹列表框 勾选列表选项保存 可删除可重新查询列表添加 遇到的问题&#xff1a;删除之后查询列表selection回显问题 解决&#xff1a;row-click配合:reserve-selection"true"使用 <el-tableref"refPlanTable":data"…

Java多线程(02)—— 线程等待,线程安全

一、如何终止线程 终止线程就是要让 run 方法尽快执行结束 1. 手动创建标志位 可以通过在代码中手动创建标志位的方式&#xff0c;来作为 run 方法的执行结束条件&#xff1b; public static void main(String[] args) throws InterruptedException {boolean flag true;Thr…

Ableton Live 11 Suite for Mac:音乐创作的全能伙伴

在数字音乐创作的广阔天地中&#xff0c;Ableton Live 11 Suite for Mac无疑是一颗璀璨的明星。作为一款专业的音乐制作软件&#xff0c;它集合了音频录制、编辑、混音、母带制作等全方位功能&#xff0c;为Mac用户提供了无与伦比的音乐创作体验。 Ableton Live 11 Suite拥有直…

这几个素材网站,是B站up主的剪辑素材宝藏库!

1.Videvo 这是一个提供完全免费的视频的网站&#xff0c;主要收集互联网免费的视频片段 网站目前收录了超过2700部高清短片&#xff0c;并且每周都会更新 2.电影预告片资源网——预告片世界 预告片世界是一个个人网站&#xff0c;为粉丝提供最新的高清电影预告片资源的在线观…

(4)医疗图像处理:MRI磁共振成像-成像技术--(杨正汉)

目录 一、特殊成像技术 1.水成像技术 2.化学位移成像技术 二、成像辅助技术 1.脂肪抑制技术 2.磁化转移技术 3.流动补偿技术 4.空间饱和空间标记技术 5.生理门控及导航回波技术 所有的这些技术最终就是为了使得K空间通过傅里叶变化之后得到的图片变的更为清晰。 一、…

全新PSAI设计插件 —— StartAI,让想象触手可及!

告别繁琐的设计过程&#xff0c;StartAI将为你的创作注入新动力&#xff0c;让每一个设计瞬间变得生动而独特。 核心功能介绍&#xff1a; 高清修复 - 每一个设计细节都至关重要&#xff0c;StartAI的高清修复可以细节优化&#xff0c;确保你的设计完美无瑕。 百变生图风格- 从…

linux安装mysql后,配置mysql,并连接navicat软件

Xshell连接登陆服务器 输入全局命令 mysql -u root -p 回车后&#xff0c;输入密码&#xff0c;不显示输入的密码 注意mysql服务状态&#xff0c;是否运行等 修改配置文件my.cnf&#xff0c;这里没找到就找my.ini&#xff0c;指定有一个是对的 find / -name my.cnf 接下…

小心你的小程序被清退!小程序备案全流程攻略

小心你的小程序被清退&#xff01;小程序备案全流程攻略 前言&#xff1a; 接微信官方通知&#xff0c;2023年9月1日后微信小程序必须完成备案才可上架&#xff01;受微信官方调整影响&#xff0c;所有已使用或计划授权微信小程序使用的用户均要求备案后上架产品。 【微信小程…

STM32 OTA需要注意问题

一、OTA设计思路&#xff08;问题&#xff09; 1、根据stm32f405 flash分布&#xff0c;最初将flash划分为四个区域&#xff0c;分别是Bootloader、APP1、APP2、参数区&#xff0c;设备上电后&#xff0c;进入Bootloader程序&#xff0c;判断OTA参数&#xff0c;根据参数来确定…

【YashanDB知识库】自动选举配置错误引发的一系列问题

问题现象 问题出现的步骤/操作&#xff1a; ● 配置自动选举&#xff0c;数据库备库手动发起switch over&#xff0c;命令会报错 ● 主、备库变为只读状态&#xff0c;数据库无法进行读写操作 ● shutdown immediate 停止数据库&#xff0c;此时发现数据库一直没有退出&…

设计以容错:应对失败的12种关键设计思想

"Design for Failure" 这一说法在产品设计、软件开发和系统架构中并不常见&#xff0c;因为它通常与追求成功和可靠性的目标相悖。然而&#xff0c;如果我们从另一个角度来理解它&#xff0c;即“设计以应对失败”或“设计以容错”&#xff0c;那么以下是12种常见的设…

24V_2A_1.2MHZ|PCD0303升压恒频LCD背光源专用电路超小体积封装

概述 PCD0303是一个恒定频率&#xff0c;6针SOT23电流模式升压转换器用于小型低功耗应用。PCD0303 以1.2MHz切换&#xff0c;并且允许使用微小的&#xff0c;低成本电容器和电感器2mm或更小,内部软启动会产生较小的涌入电流延长电池寿命。PCD0303具有自动切换至轻负载下的脉冲…

社交媒体数据恢复:子弹短信

在开始之前&#xff0c;请确保满足以下条件&#xff1a; 您的手机已root。您已知晓备份子弹短信的方法。 以下是子弹短信数据恢复的步骤&#xff1a; 第一步&#xff1a;备份子弹短信 如果您尚未备份子弹短信&#xff0c;请先进行备份。备份方法如下&#xff1a; 进入子弹短…