【问题标题】:How to optimize the running time of this code?如何优化这段代码的运行时间?
【发布时间】:2021-04-22 08:43:00
【问题描述】:

这个交集二维数组表示景区A出现时景区B也出现的次数。现在这段代码需要大约 1 分 30 秒才能得到结果。是否有可能在 10 秒内得到这段代码的结果?

for a in range ((len(user_record[0]))):#len(user_record[0]) is 1136
    b = 0
    for b in range ((len(user_record[0]))): #len(user_record[0]) is 1136
        c = 0
        Intersection[a][b] = 0
        for c in range (len(user_record)): #len(user_record) is 31
            Intersection[a][b] = Intersection[a][b] + user_record[c-1][a] * user_record[c-1][b]

【问题讨论】:

  • 它在做什么?
  • @Sayse 这是一个二维数组,用于计算每两个旅游景点(两个成对)被所有游客访问的次数。
  • 将更多代码移出内部循环体。例如。列表Intersection[a] 在内部b 循环中是常量。 Intersection[a][b] 在内部 c 循环中是常量。 b = 0 是多余的。不要在循环中重新评估len(user_record)
  • 哪种说法正确:您的评论 #0~108len(user_record[0]) = 1136 ?你能更新你的代码以反映确切的限制吗?请删除误导性的 cmets。
  • @pqans 我改错了 cmets。这是真的:len(user_record[0]) 是 1136,len(user_record) 是 31。

标签: python performance for-loop optimization


【解决方案1】:

我建议将您的数据移动到 numpy 结构中。之后有很多像intersect1d这样的函数可以正确的解决这类问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-15
    • 2016-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多