首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提高python中for循环速度

问提高python中for循环速度
EN

Stack Overflow用户
提问于 2017-11-30 04:23:43
回答 1查看 702关注 0票数 0

我正在尝试计算从1到10^7的数的分割数。我正在使用五角数定理来实现这一点,它提供了一种计算n的分割数的方法,我们称之为P(n) = P(n-1) + P(n-2) - P(n-5) - P(n-7) + ...所以P( n )依赖于不同的P(n-x),其中x从1到n。总之,长话短说,我使用了两个循环,一个循环从1到10^7,另一个循环使用x的定义,并根据特定的公式进行计算。正如您可以想象的那样,代码运行得相当慢。有什么方法可以提高这些for循环的速度吗?

附注:我尝试过使用numpy数组,但我对它们并不是很满意,不幸的是,这使得代码变得更慢。

代码语言:javascript
复制
def build_list(new_limit, k):
   list_of_p_minus = list()
   while k < new_limit:
       list_of_p_minus.append(k*(2*k-1))
       list_of_p_minus.append(k*(2*k+1))
       k = k+1
   return list_of_p_minus


def counter(low, high):
   current = low
   while current <= high:
      yield current
      current += 1

def loop_through_numbers(limit, list_of_p_minus):
   p_dict = dict()
   p_dict[0] = 1
   p_dict[1] = 1
   aux = 2
   aux_index = 1
   for number in counter(2, limit+1):
      if aux == number:
         if aux_index % 4 == 1 or aux_index % 4 == 2:
            p_dict[number] = -1
         else:
            p_dict[number] = 1
         aux = aux + (aux_index + 1) * 2
         aux_index += 1
      else:
         p_dict[number] = 0
      for element in counter(0, len(list_of_p_minus)):
          if element % 4 == 0 or element % 4 == 1:
             try:
                p_dict[number] += p_dict[number-list_of_p_minus[element]]
             except KeyError:
                break
          else:
             try:
                p_dict[number] -= p_dict[number-list_of_p_minus[element]]
             except KeyError:
                break
return

正如您所看到的,我尝试实现迭代器,虽然这使代码运行得更快,但仍然需要大量的时间。在这一点上,任何想法都是非常受欢迎的。

EN

回答 1

Stack Overflow用户

发布于 2017-11-30 04:35:56

代码语言:javascript
复制
m = a % 4
if m == 1 or m == 2:

比计算两次mod更快。您的代码中有两个地方可以改进这一点,但这不会大大提高速度。问题是,除了重组整个事情之外,根本没有什么可做的。但是这个问题属于codereview.SE

或者,如果您真的希望使用特定的实现细节来减少毫秒数,则可以使用C来代替python。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47561177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档