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)
>>>
>>
>  
>

Reply via email to