distributions에 대한 breeze의 설명서에서 본 예를 통해 머리를 긁적니다.클래스의 인스턴스에 대한 스칼라/
는 랜드 인스턴스를 생성 한 후, 그들은 당신이 다음을 수행 할 수 있음을 보여
이제import breeze.stats.distributions._
val pois = new Poisson(3.0);
val doublePoi: Rand[Double] = for(x <- pois) yield x.toDouble
이 매우 멋지다, 내가 전화 할 때 내가 Double
대신 Int
으로 얻을 수있는 랜드 개체를 얻을 수 있습니다 samples
방법. 또 다른 예는 다음과 같습니다.
val abc = ('a' to 'z').map(_.toString).toArray
val letterDist: Rand[String] = for(x <- pois) yield {
val i = if (x > 26) x % 26 else x
abc(i)
}
val lettersSamp = letterDist.samples.take(20)
println(letterSamp)
질문은 무엇입니까? Rand[T]
은 컬렉션이 아니며 지금까지 컬렉션에서 보았던 모든 for/yield 예제가 있습니다. 스칼라 문서는별로 언급하지 않지만, 찾은 유일한 것은 here의 for-comprehensions을 번역 한 것입니다. 여기에 기본 규칙은 무엇입니까? 어떻게 다른 방법을 사용할 수 있습니까? (바람에 관련된 대답 일 필요는 없습니다)
등이 이해를위한 기본적'flatMap's 한'지도'의 조합에 대한 문법 설탕입니다. ['Poisson'] (http://www.scalanlp.org/api/breeze/#breeze.stats.distributions.Poisson)은'flatMap'과'map'을 모두 구현하기 때문에 여러분은 이해할 수 있습니다. 귀하의 경우에 대한 이해는'pois.map (_. toDouble)'과 유사합니다. –
또한 임의 분포 *는 모음입니다.그것은 다소 이상한 컬렉션입니다 ** ** ** ** ** ** ** ** ** 요소를 포함하고있는 ** ** 각 ** 요소를 포함하고 있습니다 만, 그것을 콜렉션으로 해석 할 수 있습니다. (블룸 필터는 생각해 보면 더 이상한 필터입니다.) –