我怎样才能加快这两行代码的速度?

use*_*638 8 python performance loops

我需要加快以下代码:

for i in range(0, 2**N):

    output[i] = f(np.array(map(int, bin(i)[2:].zfill(N))))
Run Code Online (Sandbox Code Playgroud)

N周围30,因此代码非常慢(我的笔记本电脑需要大约33个小时).函数的参数f()是索引的二进制表示i,并且f()可以是任意可向量化的函数.我不是专家,但为了加速代码,我想要摆脱for循环,这意味着我需要对参数进行矢量化f().换句话说,我要创建与数字从二进制表示的矩阵02**N.这可以通过以下代码实现:

list(itertools.product([0, 1], repeat=N))
Run Code Online (Sandbox Code Playgroud)

我在这个链接上找到了.然而,在我看来,这itertools是非常缓慢的,显然它需要大量的记忆,因为2**30大约十亿.

你有什么建议让这段代码更快吗?提前致谢.

Fra*_*uzo 6

总是简介:

>>> timeit.timeit("for i in range(0, 2**N): numpy.array(map(int, bin(i)[2:].zfill(N)))", "import numpy; N=5", number=100000)
26.472519159317017
>>> timeit.timeit("for t in itertools.product((0, 1), repeat=N): numpy.array(t)", "import numpy, itertools; N=5", number=100000)
6.129688024520874
Run Code Online (Sandbox Code Playgroud)

您可以看到该itertools.product方法相当快,因为​​它不必摆弄字符串.

问题可能是大部分时间都花在了f函数上.

另一种解决方案可能是f接受一个整数,并将其用作二进制字段.