Я регулярно нахожусь в положении необходимости случайного индекса для массива или списка, где вероятности индексов неравномерно распределены, но в соответствии с определенными положительными весами. Какой быстрый способ получить их? Я знаю, что могу передать весы numpy.random.choice
в качестве необязательного аргумента p
, но функция кажется довольно медленной, и создание arange
для прохождения не идеально. Сумма весов может быть произвольным положительным числом и не гарантируется равной 1, что делает подход к генерации случайного числа в (0,1), а затем вычитанию весовых позиций до тех пор, пока результат не окажется 0 или менее невозможным.
Хотя есть ответы на то, как реализовать подобные вещи (в основном не о получении индекса массива, а о соответствующем элементе) простым способом, например Взвешенный выбор короткого и простого Я ищу быстрое решение, потому что соответствующая функция выполняется очень часто. Мои веса меняются часто, поэтому накладные расходы на создание чего-то вроде маски псевдонима (подробное введение можно найти на http://www.keithschwarz.com/darts-dice-coins/) следует учитывать часть времени вычисления.