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

2021-04-11 23:11:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我需要加速以下代码:

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

    output[i] = f(np.array(map(int, bin(i)[2:].zfill(N))))

N大约是30,所以代码非常慢(在我的笔记本上大约需要33个小时)。函数f()的参数是索引i的二进制表示,f()可以是任意的可矢量化函数。我不是专家,但是为了加快代码的速度,我在考虑去掉for循环,这意味着我需要将f()的参数矢量化。换句话说,我必须用从0到{}的数字的二进制表示来创建一个矩阵。这可以通过以下代码实现:

^{pr2}$

我在this link找到的。然而,在我看来itertools非常慢,而且显然它需要大量的内存,因为{}大约是10亿。

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

1条回答
网友
1楼 ·

始终配置文件:

>>> 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

您可以看到,itertools.product方法的速度相当快,因为它不必摆弄字符串。在

问题可能是大部分时间都花在f函数中。在

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

相关问题