NumPy - 选择范围内唯一整数的随机列表

时间:2016-11-11 14:11:23

标签: python numpy

n = range(1, n+1)内,我必须随机生成n * p个唯一整数的列表。

例如,如果n = 10p = 0.3,那么可能的结果可能是:

[2, 6, 9]
[1, 5, 7]
[3, 4, 8]
[3, 5, 6]
etc

以下Python代码完美地完成了这项工作:

import random

n = 250000
p = 0.8
np = int(n * p)

result = []
for i in range(np):
    attempt = random.randint(1, n)
    if attempt not in result:
        result.append(attempt)

但是,因为它是Python,np > 200000可能需要很长时间(例如,超过一分钟)。

使用NumPy

,您能看到上述解决方案的更高效版本吗?

2 个答案:

答案 0 :(得分:6)

试试这个:

result = random.sample(range(1,n+1),p*n)

链接到documentation of random.sample

答案 1 :(得分:0)

使result成为一个集合而不是列表将使您不必在每次迭代时遍历列表中的每个项目,以检查您要附加的新项目是否已存在。小改进,但你应该看到性能上的差异。