python - 随机数生成 python 3.x 默认库

标签 python random python-3.x

我需要在 python 3.x 中生成大量伪随机整数。
因此,我必须找到最快的方法。

目前我正在使用 python random 库。

我在 Fastest Way to generate 1,000,000+ random numbers in python 使用 numpy 找到了类似的答案但是 numpy 不是标准库,我不想添加第 3 方库(如果不是真的需要的话),因为我不能确定我提供给它的人是否安装了它们。

实际代码

def randInt(self, size=20, amount=1000):
    retVal = list()
    for i in range(0, amount):
        retVal.append(random.Random._randbelow(size)+1) #+1 to exclude 0 and include size
    return retVal

测试:

start = time.time()
test = randInt(size=100, amount=1000000)
stop = time.time()
print(stop-start)

我测试过的这些随机函数:

_randbelow : 1.6700019 sec
randrange : 2.8700041 sec
randint : 3.1200051 sec

所以我的问题是:
有没有比 _randbelow 使用 python 3.x 默认库更快的方法?

谢谢
寒意0r

编辑

Inbar Roses 建议使用相同方法测试(比较结果)

uniform : 0.9200019 sec
uniform parsed to int : 1.24000 sec

对于我来说,100 万个整数需要 1.24 秒。 如果以后出现问题,我可能不得不研究多线程或真正使用 numpy

最佳答案

我已经为你定时了一些随机函数:

>>> import timeit
>>> timeit.Timer('random.randint(0,10)', 'import random').repeat()
[2.4119170746830494, 2.3879981728693105, 2.3901411990453427]
>>> timeit.Timer('random.randrange(0,10)', 'import random').repeat()
[2.274937673930552, 2.178254943434162, 2.1761346646683215]
>>> timeit.Timer('r._randbelow(10)', 'import random; r = random.Random()').repeat()
[1.115751664321607, 1.0852712353494667, 1.0842890608805078]
>>> timeit.Timer('random.uniform(0,10)', 'import random').repeat()
[0.5058132474312629, 0.4609362760654676, 0.4719052973948692]

看起来制服是你最好的选择。

关于python - 随机数生成 python 3.x 默认库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20172516/

相关文章:

python - 如何更改使用 Matplotlib 绘制的图形的大小?

algorithm - 寻找有限的洗牌算法

python - 确保 gensim 为同一数据的不同运行生成相同的 Word2Vec 模型

python - Exchangelib 关闭连接

python - 对Python整数的最后6k位进行base64编码的最佳方法

python - cv2.FeatureDetector_create ('SIFT' ) 导致段错误

python - 如何将选定的数据条目应用到我的 to sql 更新功能?

java - 猜数字游戏不断重复?

python - 如何使用 nltk 使用 line_tokenize 或 word_tokenize 分隔新行?

python-3.x - 使用 glob.glob() 读取时如何排除某些文件?