簡體   English   中英

Numpy 隨機數生成器延遲

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM