首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在python中加速多个内部产品

如何在python中加速多个内部产品
EN

Stack Overflow用户
提问于 2014-11-17 02:53:53
回答 5查看 923关注 0票数 17

我有一些执行以下操作的简单代码。

它遍历所有可能的长度为n的列表F和+-1个条目。对于每个条目,它都会迭代所有可能长度的2n列表S和+-1条目,其中$S$的前一半只是后半部分的副本。代码计算F与长度为nS的每个子列表的内积。对于每个F,S,它计算直到第一个非零的内积为零的内积。

下面是代码。

代码语言:javascript
复制
#!/usr/bin/python

from __future__ import division
import itertools
import operator
import math

n=14
m=n+1
def innerproduct(A, B):
    assert (len(A) == len(B))
    s = 0 
    for k in xrange(0,n):
        s+=A[k]*B[k]
    return s

leadingzerocounts = [0]*m
for S in itertools.product([-1,1], repeat = n):
    S1 = S + S
    for F in itertools.product([-1,1], repeat = n):
        i = 0
        while (i<m):
            ip = innerproduct(F, S1[i:i+n])
            if (ip == 0):
                leadingzerocounts[i] +=1
                i+=1
            else:
                break

print leadingzerocounts

n=14的正确输出为

代码语言:javascript
复制
[56229888, 23557248, 9903104, 4160640, 1758240, 755392, 344800, 172320, 101312, 75776, 65696, 61216, 59200, 59200, 59200]

使用pypy,当n= 14时,这需要1分18秒。不幸的是,我真的想运行16,18,20,22,24,26。我不介意使用numba或cython,但如果可能的话,我更愿意使用python。

任何帮助加快这一进程的人都非常感谢。

我将在这里记录下最快的解决方案。(如果我错过了更新的答案,请告诉我。)

  • n = 22 at 9m35.081s by Eisenstat (C)
  • n = 18 at 1m16.344s by Eisenstat (pypy)
  • n = 18 at 2m54.998s by Tupteq (pypy)
  • n = 14 at 26s by Neil (numpy)
  • n - 14 at 11m59.192s by kslote1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26960749

复制
相关文章

相似问题

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