【发布时间】: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