[Numpy-discussion] numpy.random.hypergeometric - strange results

joep josef.pktd@gmail....
Thu Oct 2 21:14:33 CDT 2008


see http://scipy.org/scipy/numpy/ticket/921

I think I found the error

http://scipy.org/scipy/numpy/browser/trunk/numpy/random/mtrand/distributions.c

{{{
805 	    /* this is a correction to HRUA* by Ivan Frohne in rv.py */
806 	    if (good > bad) Z = m - Z;
}}}

Quickly looking at the referenced program,
downloaded from: http://pal.ece.iisc.ernet.in/~dhani/frohne/rv.py

Notation: alpha = bad, beta = good:

{{{
               if alpha > beta:           # Error in HRUA*, this is
correct.
                  z = m - z
}}}

As you can see, if my interpretation is correct, then line 806 should
have good and bad reversed, i.e.

{{{
806 	    if (bad > good) Z = m - Z;
}}}

Can you verify this? I never tried to build numpy from source.

Josef

On Sep 25, 4:18 pm, joep <josef.p...@gmail.com> wrote:
> In my fuzz testing of scipy stats, I get sometimes a test failure. I
> think there is something
> wrong with numpy.random.hypergeometric for some cases:
>
> Josef
>
> >>> import numpy.random as mtrand
> >>> mtrand.hypergeometric(3,17,12,size=10)   # there are only 3 good balls in urn
>
> array([16, 17, 16, 16, 15, 16, 17, 16, 17, 16])>>> mtrand.hypergeometric(17,3,12,size=10)   #negative result
>
> array([-3, -4, -3, -4, -3, -3, -4, -4, -5, -4])
>
> >>> mtrand.hypergeometric(4,3,12,size=10)
> >>> np.version.version
>
> '1.2.0rc2'
>
> I did not find any clear pattern when trying out different parameter
> values:
>
> >>> mtrand.hypergeometric(10,10,12,size=10)
>
> array([5, 6, 4, 4, 8, 5, 4, 6, 7, 4])>>> mtrand.hypergeometric(10,10,20,size=10)
>
> array([10, 10, 10, 10, 10, 10, 10, 10, 10, 10])>>> mtrand.hypergeometric(10,10,19,size=10)
>
> array([10,  9,  9,  9,  9,  9, 10,  9,  9,  9])>>> mtrand.hypergeometric(10,10,5,size=10)
>
> array([3, 5, 2, 2, 1, 2, 2, 4, 3, 1])>>> mtrand.hypergeometric(10,2,5,size=10)
>
> array([4, 5, 4, 5, 5, 5, 4, 3, 4, 4])>>> mtrand.hypergeometric(2,10,5,size=10)
>
> array([0, 2, 1, 0, 2, 2, 1, 1, 1, 1])
>
> >>> mtrand.hypergeometric(17,3,12,size=10)
>
> array([-5, -3, -4, -4, -4, -3, -4, -4, -3, -3])>>> mtrand.hypergeometric(3,17,12,size=10)
>
> array([15, 16, 17, 16, 15, 16, 15, 15, 17, 17])>>> mtrand.hypergeometric(18,3,12,size=10)
>
> array([-5, -6, -6, -4, -4, -4, -5, -3, -5, -5])
>
> >>> mtrand.hypergeometric(18,3,5,size=10)
>
> array([4, 5, 5, 5, 5, 5, 4, 5, 4, 3])>>> mtrand.hypergeometric(18,3,19,size=10)
>
> array([1, 1, 2, 1, 1, 1, 1, 3, 1, 1])
> _______________________________________________
> Numpy-discussion mailing list
> Numpy-discuss...@scipy.orghttp://projects.scipy.org/mailman/listinfo/numpy-discussion


More information about the Numpy-discussion mailing list