Использование Numpy для генерации последовательности случайных целых чисел с переменной max/min
numpy.random.uniform
поддерживает аргументы массива, но np.random.randint
не поддерживает:
import numpy as np
two_random_uniforms = np.random.uniform([0, 1], [3, 4])
this_raises_exception = np.random.randint([0, 1], [3, 4])
Поведение, которое я хочу получить из второй строки кода, эквивалентно:
result = []
for lown, highn in zip([0, 1], [3, 4]):
result.append(np.random.randint(lown, highn))
Есть ли способ выполнить генерацию случайных целых чисел с переменной max/min без написания цикла python? Описанный выше обходной путь будет недопустимо медленным для больших массивов, которые требуются моему приложению. Я могу написать цикл в cython, но я бы предпочел использовать Numpy, если это возможно.
1 ответ:
Одна простая вещь, которую вы можете сделать, - это просто создать поплавки и обогнуть их.
def my_randint(low, high): return np.floor(np.random.uniform(low, high))
Возможно, что эта процедура может немного изменить полученное распределение, чтобы сделать некоторые целые числа хоть немного более вероятными, чем другие, но если вы не работаете с криптографией или каким-то другим чувствительным приложением, это, вероятно, не будет иметь значения.