如何在python中生成唯一模值的随机数
这段代码生成16个随机数,选择范围最大为1000。但是如何生成具有不同模数值(从1到26)的数字,就像python中的那样 考虑数值例子 随机获得的值为:如何在python中生成唯一模值的随机数,python,random,modulus,Python,Random,Modulus,这段代码生成16个随机数,选择范围最大为1000。但是如何生成具有不同模数值(从1到26)的数字,就像python中的那样 考虑数值例子 随机获得的值为: 184,15106,8,93150210144271365,65,60385164349405 当我们对所有这些数字执行mod 26操作时,我们得到 0,15,2,8,15,20,2,14,11,1,13,8,21,8,11,15 这里的数字15,8,11,2重复出现。所以我想消除这种重复。为此,我希望在执行mod 26操作时生成具有不同值的
184,15106,8,93150210144271365,65,60385164349405
当我们对所有这些数字执行mod 26
操作时,我们得到
0,15,2,8,15,20,2,14,11,1,13,8,21,8,11,15
这里的数字15,8,11,2
重复出现。所以我想消除这种重复。为此,我希望在执行mod 26
操作时生成具有不同值的随机数 你能行
随机输入
随机样本(范围(10000),1000)
这将生成1000个随机数
例如,获取10000范围内的10个随机数
随机抽样(范围(10000),10)
[333928459485852601356913327123486198939483]
假设您要查找其模数
5
为4
的16
数字,最大值不大于1000
Numpy解决方案
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)
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]
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
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)
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]
distinct_modulo(n=16, modulo=26)
Out: [ 0, 19, 23, 5, 6, 25, 21, 22, 10, 16, 12, 14, 20, 15, 1, 8]
如果需要不同的模n
值
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)
只需返回范围[0,模-1]
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)
非Numpy解决方案
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)
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]
distinct_modulo(n=16, modulo=26)
Out: [ 0, 19, 23, 5, 6, 25, 21, 22, 10, 16, 12, 14, 20, 15, 1, 8]
什么是“唯一模量值”?唯一模量值表示模量值(例如421 mod 26)为每个随机选择的数字计算的值应不同,或选择16个随机数,这些随机数具有上述1到26之间的不同模数值。所选数字的计算模块值应不同,或每个模块值应彼此唯一,模块值可以在1到26之间如果你能在上面给我们一个数值例子会更好。我在问题中加了一个简单的数值解释。希望你理解我的问题。这里也有数字在你的输出中重复。请在不使用numpy的情况下执行此操作。上一个代码中的错误是
replace=True
必须是replace=False
。还添加了非numpy解决方案