On Wed, Aug 31, 2011 at 3:22 PM, Olivier Delalleau <[email protected]> wrote:
> 2011/8/31 Christopher Jordan-Squire <[email protected]>
>>
>> On Wed, Aug 31, 2011 at 2:07 PM, Olivier Delalleau <[email protected]> wrote:
>> > You can use:
>> > 1 + numpy.argmax(numpy.random.multinomial(1, [0.1, 0.2, 0.7]))
>> >
>> > For your "real" application you'll probably want to use a value >1 for
>> > the
>> > first parameter (equal to your sample size), instead of calling it
>> > multiple
>> > times.
>> >
>> > -=- Olivier
>>
>> Thanks. Warren (Weckesser) mentioned this possibility to me yesterday
>> and I forgot to put it in my post. I assume you mean something like
>>
>> x = np.arange(3)
>> y = np.random.multinomial(30, [0.1,0.2,0.7])
>> z = np.repeat(x, y)
>> np.random.shuffle(z)
>>
>> That look right?
>>
>> -Chris JS
>>
>
> Yes, exactly.
Chuck's answer to the same question, when I asked on the list, used
searchsorted and is fast
cdfvalues.searchsorted(np.random.random(size))
my recent version of it for FiniteLatticeDistribution
def rvs(self, size=1):
'''draw random variables with shape given by size
'''
#w = self.pdfvalues
#p = cumsum(w)/float(w.sum())
#p.searchsorted(np.random.random(size))
return self.support[self.cdfvalues.searchsorted(np.random.random(size))]
Josef
>
> -=- Olivier
>
> _______________________________________________
> NumPy-Discussion mailing list
> [email protected]
> http://mail.scipy.org/mailman/listinfo/numpy-discussion
>
>
_______________________________________________
NumPy-Discussion mailing list
[email protected]
http://mail.scipy.org/mailman/listinfo/numpy-discussion