SunnyEdward 2022-04-16 10:58 采纳率: 75%
浏览 93
已结题

如何提高嵌套for循环的效率

问题遇到的现象和发生背景

我有4个ndarray,分别是link_start(shape=(74328,1)),link_start5(shape=(4310278,5)),link_end(shape=(74328,1)),link_end5(shape=4310278,5)
我需要分别遍历去比较link_start与link_start5和link_end与link_end5,做比较的目的是只要link_start[i]这个元素在link_start5[j]中存在且link_end[i]这个元素在link_end5[j]中也存在,那么我的原始数据列表中的第j条就是我需要进一步处理的数据。
列表中的数据都是数值,形如这样:
link_start[1]=[5],link_start5[22145]=[2,6,5,4,3]
link_end[1]=[3],link_end5[22145]=[5,2,7,3,9]
比如存在上面这两组数据,那么原始数据列表中的第22145条就是我需要进一步处理的数据。
代码如下:
#方法1

for i in range(len(link_start)):
    for j in range(len(link_start5)):
        if np.in1d(link_start[i],link_start5[j]) == True and np.in1d(link_end[i],link_end5[j]) == True:
            print(i,j)

#方法2

for i in range(len(link_start)):
    for j in range(len(link_start5)):
        if ((link_start[i] == link_start5[j]).sum()) >= 1 and ((link_end[i] == link_end5[j]).sum()) >= 1:
            print(i,j)

我想要达到的结果

请问如何能够改进代码从而提高运算效率,是否有什么方法能够尽量避免显式for的使用。

  • 写回答

5条回答 默认 最新

  • 天元浪子 Python领域优质创作者 2022-04-16 12:03
    关注

    题主对问题的描述不清,比如:

    1. 既然N1和N2是ndarray,直接给出它们的shape和dtype,简单明了。你这样描述了一大串,我还是不知道N1和N2各自是几维的,xi和yi究竟是数组还是整数还是浮点数?
    2. 前面说了有两个ndarray,后面的代码却使用了4个数组:link_start,link_start5,link_end, link_end5,究竟哪个是N1,哪个是N2?
    3. 判断数组等于True,以及对布尔数组求和,这都是极端错误的写法
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月25日
  • 已采纳回答 4月17日
  • 修改了问题 4月16日
  • 修改了问题 4月16日
  • 展开全部

悬赏问题

  • ¥15 r语言神经网络自变量重要性分析
  • ¥15 基于双目测规则物体尺寸
  • ¥15 wegame打不开英雄联盟
  • ¥15 公司的电脑,win10系统自带远程协助,访问家里个人电脑,提示出现内部错误,各种常规的设置都已经尝试,感觉公司对此功能进行了限制(我们是集团公司)
  • ¥15 救!ENVI5.6深度学习初始化模型报错怎么办?
  • ¥30 eclipse开启服务后,网页无法打开
  • ¥30 雷达辐射源信号参考模型
  • ¥15 html+css+js如何实现这样子的效果?
  • ¥15 STM32单片机自主设计
  • ¥15 如何在node.js中或者java中给wav格式的音频编码成sil格式呢