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)#