生成n组随机数而没有循环[重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了生成n组随机数而没有循环[重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

所以当我在Python中生成1000组随机数(0..2000)时,我可以轻松地做到这样的事情:

iters = 1000
randIdx = []
numbers = range(0, 2000)
for i in range(iters):
        randIdx.append(random.sample(numbers, 8))

问题是代码非常慢。有没有办法避免for循环告诉函数只放出1000套或者是否有某种解决方法?我想到只生成8000个随机数,但问题是,当一组8个数字不允许重复时,不可能这样做!

例:

 randIdx=[]
 indexRange = range(0, 3)  
 for i in range(5):
     randIdx.append(random.sample(indexRange, 2))

[[0, 1], [2, 1], [2, 0], [1, 0], [2, 1]]
答案

你可以使用numpy库:

import numpy as np

arr = np.random.randint(0, 2000, (1000, 8))

# array([[1026,   46, 1620, ...,  534, 1098, 1406],
#        [1081, 1235,  484, ..., 1124,  841,    4],
#        [1189, 1505, 1943, ...,   55, 1547, 1936],
#        ..., 
#        [1242,  877, 1129, ...,  230, 1226, 1399],
#        [1134,  939,  969, ..., 1600,  288, 1479],
#        [ 492,    5,  545, ..., 1093, 1805, 1404]])

然后只需将数组切片以进行一次选择,例如arr[0]将为您提供第一行作为数组。

以上是关于生成n组随机数而没有循环[重复]的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript复习

在范围内生成'n'个唯一随机数[重复]

没有数组的java随机数生成器

golang连续生成随机数重复

Java 随机分组

MATLAB如何把n个数不重复地随机分为m组