使用Scala和Breeze进行无需替换的采样

时间:2014-06-29 02:24:22

标签: scala random-sample multinomial 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

,其中最相关的位是传递给mult.sample()的“replacement = false”参数。 我想确保我对唯一索引进行采样,并且我希望这样做而不为每次绘制定义新的多项分布。

或者,如果有更好的方法来实现相同的结果,我也很高兴听到这一点。

1 个答案:

答案 0 :(得分:1)

内置任何内容,抱歉。你可以做点什么

(0 until 2).foldLeft(Seq.empty[Int])( (seq, _) => mult.filter(!seq.contains(_)).draw :+ seq)

你真的想要展开(或者,我想,这是一种能够实现你所列出的方法的方法。如果你在GH上提出问题,希望我们很快就能解决这个问题......