Johan's approach is actually very elegant (and pythonic).
On Monday, 13 January 2014 23:00:25 UTC, John Myles White wrote: > > FWIW, I really like Johan's approach. > > For me, the main difficulty with emulating R's interface is that the > current version of `rand` is a method that takes exactly one distribution > object and draws samples from that object. R doesn't have to think about > the number of distributions objects being passed in, so it exposes a very > different interface. > > One thing we could do is allow users to pass in a vector of distribution > objects, each of which would contribute one more samples. But then you'd > end up writing something like rand([Bernoulli(p) for p in [0.1, 0.2, > 0.3]]). I think that's a little strange as an idiom, but it would mix > naturally with our existing tools. > > -- John > > On Jan 13, 2014, at 1:05 PM, Kevin Squire <[email protected] > <javascript:>> wrote: > > Hi Sam, I would suggest submitting an issue against the Distributions.jl > package. > > Cheers, Kevin > > > > > On Mon, Jan 13, 2014 at 12:00 PM, Johan Sigfrids <[email protected] > <javascript:>> wrote: > >> I would think using a list comprehension would be a easy and Julian way >> of doing it: >> >> using Distributions >> p = [0.1, 0.2, 0.3, 0.4, 0.5] >> [rand(Bernoulli(x)) for x in p] >> >> >> >> On Monday, January 13, 2014 9:44:02 PM UTC+2, Sam L wrote: >>> >>> In my case I'm trying to generate an array of independent Bernoulli >>> r.v.s where the parameter for each Bernoulli is given in an array p. In R, >>> I'd do rbinom(length(p), 1, p). It looks like the Distributions >>> package does not support this sort of thing. I have a few solutions to my >>> particular problem shown at the bottom of this message but I'm curious >>> about the best way to do this in general. >>> >>> Is this something the Distributions package will support in the future >>> or is there a better/built in way to do this? It seems to me that it would >>> come up frequently and having to write a function to vectorize it every >>> time is a pain. >>> >>> Sam >>> >>> #Some solutions >>> rbern(p) = rand(Bernoulli(p)) >>> @vectorize_1arg Real rbern >>> type RandBernoulli <: Functor{1} end >>> NumericExtensions.evaluate(::RandBernoulli, p) = rbern(p) #then map >>> >>> rbern2(p) = int(rand(length(p)) .< p) >>> >> > >
