Предположим, вы хотите найти 16
чисел, в которых модуль 5
равен 4
, с максимальным значением, не превышающим 1000
.
Numpy Solution
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]
Non Numpy Solution
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]