当前位置:首页 > 科技  > 软件

Python 数亿次数值对对比,如何高效率处理?

来源: 责编: 时间:2024-06-05 17:43:28 75观看
导读python有列表a和b,结构都如下所示:[[x1,y1,x2,y2]],x1,y1表示矩形的左下角坐标,x2,y2表示矩形右上角坐标,这样的矩形有n多个(大数据量),遍历a中每一个矩形,找出b中与其相交的矩形,输出a中矩形index和b中相交矩形的index。如

python有列表a和b,结构都如下所示:[[x1,y1,x2,y2]],x1,y1表示矩形的左下角坐标,x2,y2表示矩形右上角坐标,这样的矩形有n多个(大数据量),遍历a中每一个矩形,找出b中与其相交的矩形,输出a中矩形index和b中相交矩形的index。oxD28资讯网——每日最新资讯28at.com

oxD28资讯网——每日最新资讯28at.com

如此大数据量的对比,可以使用numpy中的广播和矩阵运算来高效处理。oxD28资讯网——每日最新资讯28at.com

oxD28资讯网——每日最新资讯28at.com

首先,将a和b转换为numpy数组,方便进行矩阵运算。假设a和b分别为:oxD28资讯网——每日最新资讯28at.com

a = [[x1_1, y1_1, x2_1, y2_1], [x1_2, y1_2, x2_2, y2_2], ...]b = [[x1_1, y1_1, x2_1, y2_1], [x1_2, y1_2, x2_2, y2_2], ...]

则可以使用numpy数组的广播功能,将a和b分别扩展成形状为(n,m,4)的数组,其中n和m分别为a和b的长度,4表示每个矩形有4个坐标值。具体实现如下:oxD28资讯网——每日最新资讯28at.com

import numpy as npa = np.array(a)b = np.array(b)a = np.expand_dims(a, axis=1)b = np.expand_dims(b, axis=0)a = np.tile(a, (1, len(b), 1))b = np.tile(b, (len(a), 1, 1))

这样,a和b就可以进行矩阵运算了。接下来,可以使用numpy的逻辑运算和索引功能,找出与每个a矩形相交的b矩形。具体实现如下:oxD28资讯网——每日最新资讯28at.com

overlap = np.logical_and(    np.logical_and(a[:, :, 0] < b[:, :, 2], a[:, :, 2] > b[:, :, 0]),    np.logical_and(a[:, :, 1] < b[:, :, 3], a[:, :, 3] > b[:, :, 1]))result = np.argwhere(overlap)

其中,overlap表示a和b的每个矩形是否相交,result为相交的矩形对的索引。例如,result中的一行表示b中第i个矩形与a中第j个矩形相交。oxD28资讯网——每日最新资讯28at.com

最后,可以将result中的索引转换为b和a中的矩形索引,输出即可。完整代码如下:oxD28资讯网——每日最新资讯28at.com

import numpy as npa = [    [4,6,7,7],    [3,3,4,4]]b = [    [9,3,10,4],    [3,2,5,4],    [4,6,8,7],    [3,3,7,7]]a = np.array(a)b = np.array(b)a = np.expand_dims(a, axis=1)b = np.expand_dims(b, axis=0)a = np.tile(a, (1, len(b), 1))b = np.tile(b, (len(a), 1, 1))overlap = np.logical_and(    np.logical_and(a[:, :, 0] < b[:, :, 2], a[:, :, 2] > b[:, :, 0]),    np.logical_and(a[:, :, 1] < b[:, :, 3], a[:, :, 3] > b[:, :, 1]))result = np.argwhere(overlap)for r in result:    a_index, b_index = r[0], r[1]    print("a index: {}, b index: {}".format(a_index, b_index))

本文链接://www.dmpip.com//www.dmpip.com/showinfo-26-92128-0.htmlPython 数亿次数值对对比,如何高效率处理?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 模拟实现.NET中的Task机制:探索异步编程的奥秘

下一篇: 11道JavaScript 面试题

标签:
  • 热门焦点
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 摸鱼心法第一章——和配置文件说拜拜

    摸鱼心法第一章——和配置文件说拜拜

    为了能摸鱼我们团队做了容器化,但是带来的问题是服务配置文件很麻烦,然后大家在群里进行了“亲切友好”的沟通图片图片图片图片对比就对比,简单对比下独立配置中心和k8s作为配
  • 服务存储设计模式:Cache-Aside模式

    服务存储设计模式:Cache-Aside模式

    Cache-Aside模式一种常用的缓存方式,通常是把数据从主存储加载到KV缓存中,加速后续的访问。在存在重复度的场景,Cache-Aside可以提升服务性能,降低底层存储的压力,缺点是缓存和底
  • 企业采用CRM系统的11个好处

    企业采用CRM系统的11个好处

    客户关系管理(CRM)软件可以为企业提供很多的好处,从客户保留到提高生产力。  CRM软件用于企业收集客户互动,以改善客户体验和满意度。  CRM软件市场规模如今超过580
  • Python异步IO编程的进程/线程通信实现

    Python异步IO编程的进程/线程通信实现

    这篇文章再讲3种方式,同时讲4中进程间通信的方式一、 Python 中线程间通信的实现方式共享变量共享变量是多个线程可以共同访问的变量。在Python中,可以使用threading模块中的L
  • 大厂卷向扁平化

    大厂卷向扁平化

    来源:新熵作者丨南枝 编辑丨月见大厂职级不香了。俗话说,兵无常势,水无常形,互联网企业调整职级体系并不稀奇。7月13日,淘宝天猫集团启动了近年来最大的人力制度改革,目前已形成一
  • 余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    余承东:AI大模型技术的发展将会带来下一代智能终端操作系统的智慧体验

    8月4日消息,2023年华为开发者大会(HDC.Together)今天正式开幕,华为发布HarmonyOS 4、全新升级的鸿蒙开发套件、HarmonyOS Next开发者预览版本等一系列
  • Android 14发布:首批适配机型公布

    Android 14发布:首批适配机型公布

    5月11日消息,谷歌在今天凌晨举行了I/O大会,本次发布会谷歌带来了自家的AI语言模型PaLM 2、谷歌Pixel Fold折叠屏、谷歌Pixel 7a手机,同时发布了Androi
  • 质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    质感不错!OPPO K11渲染图曝光:旗舰IMX890传感器首次下放

    一直以来,OPPO K系列机型都保持着较为均衡的产品体验,历来都是2K价位的明星机型,去年推出的OPPO K10和OPPO K10 Pro两款机型凭借各自的出色配置,堪称有
Top
Baidu
map