在n = range(1, n+1)
以内我必须随机生成一个n * p
唯一整数列表。NumPy - 选择一个范围内唯一整数的随机列表
例如,如果n = 10
和p = 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
查看上述解决方案的更高效版本?
创建范围的密集表示(np.arange(1,N + 1)),并使用np.random.choice()无需替换,或洗牌并取前n个值。这些方法是一种时间记忆折衷。 – sascha
@sascha,在评论中提出答案的意义何在? – user2699
@ user2699简单的问题,简单的答案。没有时间添加完整的高质量答案,但有足够的雄心壮志,不能给出一些冲突的低质量答案(例如,没有假设,基准和合作的一行代码)。因此概述了一种方法来提供帮助。 – sascha