Spec-Zone.ru › NumPy 2.0

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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API