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