[SciPy-User] vectorized version of 'multinomial' sampling function

David Warde-Farley dwf at cs.toronto.edu
Tue Oct 13 19:59:41 EDT 2009


On 13-Oct-09, at 5:01 PM, per freem wrote:

> hi all,
>
> i have a series of probability vector that i'd like to feed into
> multinomial to get an array of vector outcomes back. for example,
> given:
>
> p = array([[ 0.9 ,  0.05,  0.05],
>       [ 0.05,  0.05,  0.9 ]])
>
> i'd like to call multinomial like this:
>
> multinomial(1, p)
>
> to get a vector of multinomial samplers, each using the nth list in
> 'p'. something like:
>
> array([[1, 0, 0], [0, 0 1]]) in this case. is this possible? it seems
> like 'multinomial' takes only a one dimensional array. i could write
> this as a "for" loop of course but i prefer a vectorized version since
> speed is crucial for me here.
>
> thanks very much.

Your best bet is probably to copy the pyrex/Cython code for  
multinomial in numpy/random/mtrand/mtrand.pyx, and add the  
functionality you want there.  If you do it right (i.e. type your loop  
indices) then it should be fast.

David



More information about the SciPy-User mailing list