作者:蓝瑟 | 来源:互联网 | 2022-12-04 11:46
1> Alexander..:
尽管没有向量化,但我相信以下解决方案的速度要快大约2倍(numba解决方案的速度要快60倍)。它将每个保存result
为局部变量,而不是按位置访问numpy数组。
def unif_improved(n):
m = 2**32
a = 1664525
c = 1013904223
results = np.empty(n)
results[0] = result = int((time.time() * 1e7) % m)
for i in range(1, n):
result = results[i] = (a * result + c) % m
return results / m
您也可以考虑使用Numba来进一步提高速度。https://numba.pydata.org/
仅仅添加装饰器就可以@jit
吹开其他解决方案的门。
from numba import jit
@jit
def unif_jit(n):
# Same code as `unif_improved`
时机
>>> %timeit -n 10 unif_original(500000)
715 ms ± 21.5 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 unif_improved(500000)
323 ms ± 8 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
>>> %timeit -n 10 unif_jit(500000)
12 ms ± 2.68 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)