On Wed, Aug 31, 2011 at 3:34 PM, <[email protected]> wrote: > 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 >
That's exactly what I needed. Thanks! -Chris JS > >> >> -=- 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 > _______________________________________________ NumPy-Discussion mailing list [email protected] http://mail.scipy.org/mailman/listinfo/numpy-discussion
