C API для случайных чисел
Новая в версии 1.19.0.
Доступ к различным распределениям ниже возможен через Cython или библиотеки обёртки на C, такие как CFFI. Все функции принимают bitgen_t в качестве первого аргумента. Чтобы использовать их из Cython или C, необходимо слинковать со статической библиотекой npyrandom, которая входит в дистрибутив NumPy, расположенной в numpy/random/lib. Обратите внимание, что необходимо также слинковать с npymath, см. Связывание с основной математической библиотекой в расширении.
- типbitgen_t
-
bitgen_tхранит текущее состояние генератора случайных бит и указатели на функции, которые возвращают стандартные типы C, продвигая состояние.struct bitgen: void *state npy_uint64 (*next_uint64)(void *st) nogil uint32_t (*next_uint32)(void *st) nogil double (*next_double)(void *st) nogil npy_uint64 (*next_raw)(void *st) nogil ctypedef bitgen bitgen_t
Примеры использования этих функций см. в разделе Расширение.
Функции имеют следующие соглашения об именовании:
- «стандартные» — относится к эталонным значениям для любых параметров. Например, «standard_uniform» означает равномерное распределение на интервале
0.0до1.0 - функции «fill» заполнят предоставленный
outзначениямиcnt. - Функции без «standard» в своём имени требуют дополнительных параметров для описания распределений.
- Функции с
invв своём имени основаны на медленном методе обратного преобразования вместо алгоритма поиска зиггурата, который значительно быстрее. Не-зиггуратные варианты используются в особых случаях и для обеспечения совместимости со старыми версиями.
- 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
-
typedef struct s_binomial_t { int has_binomial; /* !=0: following parameters initialized for binomial */ double psave; RAND_INT_TYPE nsave; double r; double q; double fm; RAND_INT_TYPE m; double p1; double xm; double xl; double xr; double c; double laml; double lamr; double p2; double p3; double p4; } 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)
Генерирует одно целое число
- 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)
Генерация случайных чисел uint64 в замкнутом интервале [off, off + rng].
- npy_uint64random_bounded_uint64(bitgen_t*bitgen_state, npy_uint64off, npy_uint64rng, npy_uint64mask, booluse_masked)
© 2005–2024 NumPy Developers
Licensed under the 3-clause BSD License.
https://numpy.org/doc/2.0/reference/random/c-api.html