C API for random#

Access to various distributions below is available via Cython or C-wrapperlibraries like CFFI. All the functions accept abitgen_t as theirfirst argument. To access these from Cython or C, you must link with thenpyrandom static library which is part of the NumPy distribution, locatedinnumpy/random/lib. Note that you mustalso link withnpymath,seeLinking against the core math library in an extension.

typebitgen_t#

Thebitgen_t holds the current state of the BitGenerator andpointers to functions that return standard C types while advancing thestate.

structbitgen:void*statenpy_uint64(*next_uint64)(void*st)nogiluint32_t(*next_uint32)(void*st)nogildouble(*next_double)(void*st)nogilnpy_uint64(*next_raw)(void*st)nogilctypedefbitgenbitgen_t

SeeExtending for examples of using these functions.

The functions are named with the following conventions:

  • “standard” refers to the reference values for any parameters. For instance“standard_uniform” means a uniform distribution on the interval0.0 to1.0

  • “fill” functions will fill the providedout withcnt values.

  • The functions without “standard” in their name require additional parametersto describe the distributions.

  • Functions withinv in their name are based on the slower inverse methodinstead of a ziggurat lookup algorithm, which is significantly faster. Thenon-ziggurat variants are used in corner cases and for legacy compatibility.

doublerandom_standard_uniform(bitgen_t*bitgen_state)#
voidrandom_standard_uniform_fill(bitgen_t*bitgen_state,npy_intpcnt,double*out)#
doublerandom_standard_exponential(bitgen_t*bitgen_state)#
voidrandom_standard_exponential_fill(bitgen_t*bitgen_state,npy_intpcnt,double*out)#
voidrandom_standard_exponential_inv_fill(bitgen_t*bitgen_state,npy_intpcnt,double*out)#
doublerandom_standard_normal(bitgen_t*bitgen_state)#
voidrandom_standard_normal_fill(bitgen_t*bitgen_state,npy_intpcount,double*out)#
voidrandom_standard_normal_fill_f(bitgen_t*bitgen_state,npy_intpcount,float*out)#
doublerandom_standard_gamma(bitgen_t*bitgen_state,doubleshape)#
floatrandom_standard_uniform_f(bitgen_t*bitgen_state)#
voidrandom_standard_uniform_fill_f(bitgen_t*bitgen_state,npy_intpcnt,float*out)#
floatrandom_standard_exponential_f(bitgen_t*bitgen_state)#
voidrandom_standard_exponential_fill_f(bitgen_t*bitgen_state,npy_intpcnt,float*out)#
voidrandom_standard_exponential_inv_fill_f(bitgen_t*bitgen_state,npy_intpcnt,float*out)#
floatrandom_standard_normal_f(bitgen_t*bitgen_state)#
floatrandom_standard_gamma_f(bitgen_t*bitgen_state,floatshape)#
doublerandom_normal(bitgen_t*bitgen_state,doubleloc,doublescale)#
doublerandom_gamma(bitgen_t*bitgen_state,doubleshape,doublescale)#
floatrandom_gamma_f(bitgen_t*bitgen_state,floatshape,floatscale)#
doublerandom_exponential(bitgen_t*bitgen_state,doublescale)#
doublerandom_uniform(bitgen_t*bitgen_state,doublelower,doublerange)#
doublerandom_beta(bitgen_t*bitgen_state,doublea,doubleb)#
doublerandom_chisquare(bitgen_t*bitgen_state,doubledf)#
doublerandom_f(bitgen_t*bitgen_state,doubledfnum,doubledfden)#
doublerandom_standard_cauchy(bitgen_t*bitgen_state)#
doublerandom_pareto(bitgen_t*bitgen_state,doublea)#
doublerandom_weibull(bitgen_t*bitgen_state,doublea)#
doublerandom_power(bitgen_t*bitgen_state,doublea)#
doublerandom_laplace(bitgen_t*bitgen_state,doubleloc,doublescale)#
doublerandom_gumbel(bitgen_t*bitgen_state,doubleloc,doublescale)#
doublerandom_logistic(bitgen_t*bitgen_state,doubleloc,doublescale)#
doublerandom_lognormal(bitgen_t*bitgen_state,doublemean,doublesigma)#
doublerandom_rayleigh(bitgen_t*bitgen_state,doublemode)#
doublerandom_standard_t(bitgen_t*bitgen_state,doubledf)#
doublerandom_noncentral_chisquare(bitgen_t*bitgen_state,doubledf,doublenonc)#
doublerandom_noncentral_f(bitgen_t*bitgen_state,doubledfnum,doubledfden,doublenonc)#
doublerandom_wald(bitgen_t*bitgen_state,doublemean,doublescale)#
doublerandom_vonmises(bitgen_t*bitgen_state,doublemu,doublekappa)#
doublerandom_triangular(bitgen_t*bitgen_state,doubleleft,doublemode,doubleright)#
npy_int64random_poisson(bitgen_t*bitgen_state,doublelam)#
npy_int64random_negative_binomial(bitgen_t*bitgen_state,doublen,doublep)#
typebinomial_t#
typedefstructs_binomial_t{inthas_binomial;/* !=0: following parameters initialized for binomial */doublepsave;RAND_INT_TYPEnsave;doubler;doubleq;doublefm;RAND_INT_TYPEm;doublep1;doublexm;doublexl;doublexr;doublec;doublelaml;doublelamr;doublep2;doublep3;doublep4;}binomial_t;
npy_int64random_binomial(bitgen_t*bitgen_state,doublep,npy_int64n,binomial_t*binomial)#
npy_int64random_logseries(bitgen_t*bitgen_state,doublep)#
npy_int64random_geometric_search(bitgen_t*bitgen_state,doublep)#
npy_int64random_geometric_inversion(bitgen_t*bitgen_state,doublep)#
npy_int64random_geometric(bitgen_t*bitgen_state,doublep)#
npy_int64random_zipf(bitgen_t*bitgen_state,doublea)#
npy_int64random_hypergeometric(bitgen_t*bitgen_state,npy_int64good,npy_int64bad,npy_int64sample)#
npy_uint64random_interval(bitgen_t*bitgen_state,npy_uint64max)#
voidrandom_multinomial(bitgen_t*bitgen_state,npy_int64n,npy_int64*mnix,double*pix,npy_intpd,binomial_t*binomial)#
intrandom_multivariate_hypergeometric_count(bitgen_t*bitgen_state,npy_int64total,size_tnum_colors,npy_int64*colors,npy_int64nsample,size_tnum_variates,npy_int64*variates)#
voidrandom_multivariate_hypergeometric_marginals(bitgen_t*bitgen_state,npy_int64total,size_tnum_colors,npy_int64*colors,npy_int64nsample,size_tnum_variates,npy_int64*variates)#

Generate a single integer

npy_int64random_positive_int64(bitgen_t*bitgen_state)#
npy_int32random_positive_int32(bitgen_t*bitgen_state)#
npy_int64random_positive_int(bitgen_t*bitgen_state)#
npy_uint64random_uint(bitgen_t*bitgen_state)#

Generate random uint64 numbers in closed interval [off, off + rng].

npy_uint64random_bounded_uint64(bitgen_t*bitgen_state,npy_uint64off,npy_uint64rng,npy_uint64mask,booluse_masked)#