import random
value = 1000
a = []
i = 0
b = [None] * 16
print('value = ',1000)
for x in range(value):
a.append(x)
random.Random(4).shuffle(a)
print(a)
for x in range(16):
b[x] = a[x]
print(b)
此代码会生成16个随机数,这些随机数的选择范围为1000,但是如何在python中生成具有介于1到26之间的不同模数的数字呢?
考虑数值示例
随机获得的值为:
184,15,106,8,93,150,210,144,271,365,65,60,385,164,349,405
当我们使用所有这些数字执行mod 26
操作时,我们得到
分别0,15,2,8,15,20,2,14,11,1,13,8,21,8,11,15
这里的数字15,8,11,2
在重复。所以我想消除这种重复。为此,我想在执行mod 26
操作时生成具有不同值的随机数。
答案 0 :(得分:1)
假设您要查找16
取模5
为4
且最大值不大于1000
的数字。
Numpy解决方案
def choose_random(max_limit=1000, modulo=5, value=4, size=16):
x_max = (max_limit - value) // modulo
if (max_limit - value) % modulo != 0:
x_max += 1
x = np.arange(x_max)
y = x * modulo + value
return np.random.choice(y, size=size, replace=True)
print(choose_random())
Out: [309 939 449 219 639 614 779 549 189 4 729 629 939 159 934 654]
简单的Numpy解决方案
def choose_random(max_limit=1000, modulo=5, value=4, size=16):
y = np.arange(value, max_limit, value)
return np.random.choice(y, size=size, replace=True)
如果您想要n
个不同的模modulo
值
def distinct_modulo(n, modulo):
if n > modulo:
raise Exception("Can't return more than {0} distinct values!".format(modulo))
return np.random.choice(modulo, size=n, replace=False)
您只需返回n
范围内的[0, modulo - 1]
个不同的值
distinct_modulo(n=16, modulo=26)
Out: [ 0, 19, 23, 5, 6, 25, 21, 22, 10, 16, 12, 14, 20, 15, 1, 8]
Numpy解决方案
import random
def distinct_modulo(n, modulo):
if n > modulo:
raise Exception("Can't return more than {0} distinct values!".format(modulo))
return random.sample(range(modulo), n)
distinct_modulo(n=16, modulo=26)
Out: [14, 17, 13, 10, 1, 6, 0, 20, 2, 21, 4, 19, 9, 24, 25, 16]
答案 1 :(得分:0)
你可以做 随机导入 random.sample(范围(10000),1000) 这将产生1000个随机数
例如获得10,000范围内的10个随机数
random.sample(range(10000),10) [3339,2845,9485,2601,3569,1332,7123,4861,9893,9483]