【问题标题】:Python optimizing arithmeticPython优化算法
【发布时间】:2015-10-25 14:28:25
【问题描述】:

我在 python 中有一段代码需要很长时间才能使用长数组:

n =30000
t = range(1,n)
s = sum(t)
for i in t:
  for j in t[i:]:
    if ts-j == i*j:
      //some simple code

有什么办法可以优化吗?我已经检查过 diff 和 multiply 都花费了很多时间。我试过 numpy 但结果最差。

澄清:条件很少满足 - 肯定少于 10,因此它根本不会影响性能。这将只是简单的分配。问题在于 if 条件和大数的算术运算。

【问题讨论】:

  • 如果您没有告诉我们您想要做什么,我们如何建议一种更快的方法来做某事?
  • 我已对问题进行了说明
  • 基本上,您有两个问题: 1. 每次迭代都会创建一个新的list,因为list 切片在Python 中以这种方式工作; 2.for-loops 很慢,所以用更快的东西替换双循环,例如itertools.combinations。然后在功能上重写它,例如在(i, j) 元组的生成器上映射一个函数。由于您没有显示所需的输出等,因此很难推荐更具体的内容。
  • 当您专门使用常规 Python 列表而不是 numpy 数组时,我不确定您为什么要添加 numpy 标签。如果您确实切换到使用 numpy 数组,那么可能有一些方法可以对您的部分或全部计算进行矢量化,这可能会带来非常大的性能优势。很难提出任何具体的建议,因为您还没有正确解释您要计算的内容。
  • @user2576342 你用的是哪个python版本? if 条件中的 ts 是什么?

标签: python math numpy optimization


【解决方案1】:

由于您没有指定ts 是什么,我们必须假设它是一个整数常量。

内循环的条件是ts - j == i * j,只有i + 1jts才有可能。

所以你应该分解ts 并生成所有满足1 ≤ i ≤ j ≤ n 的分解(i + 1) . j

【讨论】:

    猜你喜欢
    • 2021-06-29
    • 1970-01-01
    • 2012-02-21
    • 1970-01-01
    • 2020-07-08
    • 1970-01-01
    • 2016-07-30
    • 2023-02-03
    相关资源
    最近更新 更多