Python中的加权随机数来自值列表

时间:2016-12-24 06:18:51

标签: python list numpy random scipy

我正在尝试创建一个介于1到1000之间的10,000个随机数的列表。但我希望80-85%的数字属于同一类别(我的意思是这些数字中的大约100个应该出现80%的次数在随机数列表中)其余的出现在15-20%的时间。不知道是否可以在Python / NumPy / SciPy中完成。感谢。

2 个答案:

答案 0 :(得分:2)

这可以通过拨打random.randint()来轻松完成,以便在正确的列表中选择列表和另一个random.choice()来电。我假设列表frequent包含100个要选择的元素80百分比,rare包含要900个元素的20个元素。< / p>

import random
a = random.randint(1,5)
if a == 1:
    # Case for rare numbers
    choice = random.choice(rare)
else:
    # case for frequent numbers
    choice = random.choice(frequent)

答案 1 :(得分:1)

这是一种方法 -

a = np.arange(1,1001) # Input array to extract numbers from

# Select 100 random unique numbers from input array and get also store leftovers
p1 = np.random.choice(a,size=100,replace=0)
p2 = np.setdiff1d(a,p1)

# Get random indices for indexing into p1 and p2
p1_idx = np.random.randint(0,p1.size,(8000))
p2_idx = np.random.randint(0,p2.size,(2000))

# Index and concatenate and randomize their positions
out = np.random.permutation(np.hstack((p1[p1_idx], p2[p2_idx])))

让我们在运行后验证 -

In [78]: np.in1d(out, p1).sum()
Out[78]: 8000

In [79]: np.in1d(out, p2).sum()
Out[79]: 2000