Как выбрать случайный элемент из взвешенного массива в Джулии?

Рассмотрим два 1-мерных массива, один с элементами для выбора и один, содержащий вероятности рисования элемента другого списка.

items = ["a", 2, 5, "h", "hello", 3]
weights = [0.1, 0.1, 0.2, 0.2, 0.1, 0.3]

В Julia, как можно случайным образом выбрать элемент в items с помощью weights для взвешивания вероятности рисования данного элемента?

Ответ 1

Используйте пакет StatsBase.jl, т.е.

Pkg.add("StatsBase")  # Only do this once, obviously
using StatsBase
items = ["a", 2, 5, "h", "hello", 3]
weights = [0.1, 0.1, 0.2, 0.2, 0.1, 0.3]
sample(items, Weights(weights))

Или, если вы хотите попробовать много:

# With replacement
my_samps = sample(items, Weights(weights), 10)
# Without replacement
my_samps = sample(items, Weights(weights), 2, replace=false)

(В Юлии <1.0, Weights назывался WeightVec).

Вы можете узнать больше о Weights и почему они существуют в документах. Алгоритмы выборки в StatsBase очень эффективны и разработаны для использования различных подходов в зависимости от размера входных данных.