gpt4 book ai didi

Python:怎么这么快?

转载 作者:太空狗 更新时间:2023-10-29 22:08:35 26 4
gpt4 key购买 nike

random 模块中使用的 Mersenne Twister 的周期是(我被告知)2**19937 - 1。作为二进制数,即连续 19937 个“1”(如果我我没记错)。 Python 将其转换为十进制非常快:

$ python -m timeit '2**19937'
10000000 loops, best of 3: 0.0271 usec per loop

$ python -m timeit -s 'result = 0' 'result += 2**19937'
100000 loops, best of 3: 2.09 usec per loop

我猜第二个版本是需要转换的那个?

而且它不仅仅是二进制的。这也快。 (我不显示数字,而是显示转换为字符串的小数长度):

>>> import math
>>> N = 1000
>>> s = str((int(N*math.e))**(int(N*math.pi)))
>>> len(s)
10787
>>> N = 5000
>>> s = str((int(N*math.e))**(int(N*math.pi)))
>>> len(s)
64921

时间:

python -m timeit -s 'import math' -s 'N=1000' 's = str((int(N*math.e))**(int(N*math.pi)))'
10 loops, best of 3: 51.2 msec per loop

问题是:这实际上是如何完成的?

难道我天真地想留下深刻印象吗?我发现 Python shell 瞬间生成 5000 多个位置的景象非常壮观。

编辑:

@dalke 和@truppo 建议的额外时间安排

$ python -m timeit 'x=2' 'x**19937'
1000 loops, best of 3: 230 usec per loop
$ python -m timeit 'x=2' 'int(x**19937)'
1000 loops, best of 3: 232 usec per loop
$ python -m timeit 'x=2' 'str(x**19937)'
100 loops, best of 3: 16.6 msec per loop

$ python -m timeit -s 'result = 0' 'x = 2' 'result += x**19937'
1000 loops, best of 3: 237 usec per loop
$ python -m timeit -s 'result = 0' 'x = 2' 'result += x**19937' 'int(result)'
1000 loops, best of 3: 238 usec per loop
$ python -m timeit -s 'result = 0' 'x = 2' 'result += x**19937' 'str(result)'
100 loops, best of 3: 16.6 msec per loop

所以在我看来它像 result = 0;结果 += 2**19937 可能会强制转换。

最佳答案

讨厌在你的游行中下雨,但它这么快的原因是数学模块实际上没有用 Python 实现。

Python 支持加载导出 Python API,但以其他语言实现的共享库。 math.so 提供您从 import math 获得的模块,恰好是其中之一(_random.so 也是)。

关于Python:怎么这么快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2125159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com