#scala #random-sample #multinomial #scala-breeze #scala-nlp
#scala #Случайный #многочленный #scala-breeze #scala-nlp
Вопрос:
Есть ли поддержка выборки из мультиномиального распределения без замены? Я представляю какой-то код, например:
import breeze.linalg._
import breeze.stats.distributions._
val params = DenseVector(0.1, 0.3, 0.2, 0.4)
val mult = new Multinomial(params)
val indices = (0 until 4).toArray
val sampled_indices = mult.sample(n = 2, replacement = false)
val other_indices = (indices.toSet.diff(sampled_indices.toSet)).toArray
, где наиболее релевантным битом является аргумент «replacement = false», передаваемый в mult.sample() .
Я хотел бы убедиться, что я выбираю уникальные индексы, и я хотел бы сделать это, не определяя новое мультиномиальное распределение для каждого розыгрыша.
Или, если есть лучший способ добиться того же результата, я был бы рад услышать и об этом.
Ответ №1:
Извините, ничего не встроено. Вы могли бы сделать что-то вроде
(0 until 2).foldLeft(Seq.empty[Int])( (seq, _) => mult.filter(!seq.contains(_)).draw : seq)
На самом деле вам нужен unfold (или, я думаю, метод, который выполняет то, что вы перечислили. Если вы зарегистрируете проблему в GH, надеюсь, мы скоро к ней вернемся…
Комментарии:
1. Конечно. Я новичок в open source, поэтому я не знаю соглашений о регистрации проблемы. Это просто сообщение, описывающее функцию, которую я хотел бы? Или мне нужно предложить решение?
2. Просто предложите эту функцию. В идеале с синтаксисом, который вы хотели бы иметь. (В принципе, вы можете скопировать и вставить свой вопрос сюда, возможно, изменив формулировку с «Есть ли …» на «Я бы хотел, чтобы это было»). Если у вас есть идея о том, как это исправить, это здорово, и частичное решение позволит мне скорее добраться до него раньше. Но определенно не требуется.