Генерирование уникальных случайных чисел в Julia

Этот оператор часто успешно генерирует 3 уникальных случайных числа, но иногда он генерирует только 2 уникальных числа.

rand(1:length(matches), 3)

Как я могу переписать это, чтобы я гарантировал, что всегда генерируются 3 уникальных случайных числа. (Я открыт для использования других функций и т.д.)

Спасибо

Ответ 1

Простой ответ: (более полное объяснение ниже)

using StatsBase
MyRand = sample(1:10, 3, replace = false)   

В этом есть много осложнений. Например, всякий раз, когда вы производите произвольные числа, всегда выполняется какое-то распределение. Если вы рисуете много случайных чисел, тогда обычное описание этого в статистике состоит в том, что вы рисуете из многомерного распределения. Если ваше распределение является дискретным (т.е. Какое-либо конкретное число имеет положительную вероятность выбора), это будет фактически другое распределение, если вы укажете, что никакие две записи не могут быть равны друг другу. Таким образом, в зависимости от того, что вы хотите, это может быть относительно сложным относительно быстро. Например. если вы хотите 5 пуассоновских случайных величин, но с условием, что нет двух равных друг другу - выполнить это в коде довольно просто, но особенности распределения, которые будут производить это, будут более задействованы, а переменные, которые вы рисуете, больше не будут являются стандартными пуассоновскими случайными величинами. В зависимости от вашего приложения это может или не важно для вас иметь в виду.

НО, в этом случае, похоже, вы просто хотите выбрать три случайных элемента из списка некоторых видов, назначая равную вероятность каждому выбранному и гарантируя, что ни один элемент не будет выбран дважды. В этом случае функция sample() из StatsBase выполнит трюк с выбором опции replace = false (т.е. выборки "без замены" ), что означает, что вы удаляете число из пула возможных результатов после его выбора).

Ответ 2

Функция sample в StatsBase имеет параметр replace.

например.

using StatsBase
sample(1:10, 3, replace=false)

Документы здесь: https://statsbasejl.readthedocs.io/en/latest/