文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-11-29 22:02

关注

如此大数据量的对比,可以使用numpy中的广播和矩阵运算来高效处理。

首先,将a和b转换为numpy数组,方便进行矩阵运算。假设a和b分别为:

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个坐标值。具体实现如下:

import numpy as np

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))

这样,a和b就可以进行矩阵运算了。接下来,可以使用numpy的逻辑运算和索引功能,找出与每个a矩形相交的b矩形。具体实现如下:

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个矩形相交。

最后,可以将result中的索引转换为b和a中的矩形索引,输出即可。完整代码如下:

import numpy as np
a = [
    [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))
来源:python小王子阿亮内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯