Использование 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 2

1 ответ:

Одна простая вещь, которую вы можете сделать, - это просто создать поплавки и обогнуть их.

def my_randint(low, high):
    return np.floor(np.random.uniform(low, high))

Возможно, что эта процедура может немного изменить полученное распределение, чтобы сделать некоторые целые числа хоть немного более вероятными, чем другие, но если вы не работаете с криптографией или каким-то другим чувствительным приложением, это, вероятно, не будет иметь значения.