[英]Numpy random number generator latency
為什么與單個 function 調用相比,在重復調用的情況下,隨機數的 numpy 生成要慢得多?
例子:
import numpy as np
import timeit
if __name__ == '__main__':
latency_normal = timeit.timeit('np.random.uniform(size=(100,))', setup = 'import numpy as np')
latency_normal_loop = timeit.timeit('[np.random.uniform(size=1) for _ in range(100)]', setup = 'import numpy as np')
rng = np.random.default_rng()
latency_generator = timeit.timeit('rng.uniform(size=(100,))', setup = 'import numpy as np')
latency_generator_loop = timeit.timeit('[rng.uniform(size=1) for _ in range(100)]', setup = 'import numpy as np')
print("latencies:\t normal: [{}, {}]\t generator: [{},{}]".format(latency_normal, latency_normal_loop, latency_generator, latency_generator_loop))
Output:
latencies: normal: [2.7388298519999807, 31.694285575999857] generator: [2.6634575979996953,31.0009219450003]
對於樣本量較小的重復調用,是否有任何替代方案表現更好?
顯然,與 function 調用相關的固定每次調用成本很高。 為了解決這個問題,您可以制作一個包裝器,在一次調用中從 numpy(即 100)中檢索一批隨機數,然后從該緩存中返回值。 當緩存耗盡時,它會向 numpy 詢問另外 100 個數字等。
或者,您可以簡單地使用 Python 的random
!
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.