请留意,我将返回值更改为了一个二维整数数组。如不雅要显示结不雅,该结不雅与我们须要的结不雅更接近。
对它计时会获得:
- 10000 loops, best of 3:140 µs per loop
我们比最初的 Python 代码快约 33 倍!Julia 在该基准测试上花费了 196 微秒,是以编译的 Python 快 40%。
让我们来看另一个示例。诚实地讲,我不肯定要度量什么,但这是 Julia 团队应用的代码。
- def parse_int(t):
- for i in range(1,t):
- n = random.randint(0,2**32-1)
- s = hex(n)
- if s[-1]=='L':
- s = s[0:-1]
- m = int(s,16)
- assert m == n
- return n
实际上,Julia 团队的代码有一条额外的指令,用于在存在末尾的 ‘L’ 时删除它。我的 Anaconda 安装须要这一行,但我的 Python 3安装不须要它,所以我删除了它。最初的代码是:
- def parse_int(t):
- for i in range(1,t):
- n = random.randint(0,2**32-1)
- s = hex(n)
- if s[-1]=='L':
- s = s[0:-1]
- m = int(s,16)
- assert m == n
- return n
对修改后的代码计时会获得:
- 100 loops, best of 3:3.33 ms per loop
- 1000 loops, best of 3:617 µs per loop
Cython 代码运行速度快了约 5 倍,但这还不足以弥补与 Julia 的差距。
我对此基准测试认为困惑不解,我分析了最初的代码。以下是结不雅: