random 的 C API#

以下各種分佈的存取可透過 Cython 或 C 封裝函式庫(如 CFFI)取得。所有函數都接受 bitgen_t 作為它們的第一個引數。若要從 Cython 或 C 存取這些函數,您必須連結 NumPy 發行版中包含的 npyrandom 靜態函式庫,該函式庫位於 numpy/random/lib 中。請注意,您也必須同時連結 npymath,請參閱 連結擴充功能中的核心數學函式庫

type bitgen_t#

bitgen_t 保有 BitGenerator 的目前狀態,以及指向在推進狀態時傳回標準 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」指的是任何參數的參考值。例如,「standard_uniform」表示介於 0.01.0 區間的均勻分佈

  • 「fill」函數會將提供的 out 填滿 cnt 個值。

  • 名稱中沒有「standard」的函數需要額外參數來描述分佈。

  • 名稱中帶有 inv 的函數基於較慢的反向方法,而不是更快的 ziggurat 查閱演算法。非 ziggurat 變體用於邊緣情況和舊版相容性。

double random_standard_uniform(bitgen_t *bitgen_state)#
void random_standard_uniform_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out)#
double random_standard_exponential(bitgen_t *bitgen_state)#
void random_standard_exponential_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out)#
void random_standard_exponential_inv_fill(bitgen_t *bitgen_state, npy_intp cnt, double *out)#
double random_standard_normal(bitgen_t *bitgen_state)#
void random_standard_normal_fill(bitgen_t *bitgen_state, npy_intp count, double *out)#
void random_standard_normal_fill_f(bitgen_t *bitgen_state, npy_intp count, float *out)#
double random_standard_gamma(bitgen_t *bitgen_state, double shape)#
float random_standard_uniform_f(bitgen_t *bitgen_state)#
void random_standard_uniform_fill_f(bitgen_t *bitgen_state, npy_intp cnt, float *out)#
float random_standard_exponential_f(bitgen_t *bitgen_state)#
void random_standard_exponential_fill_f(bitgen_t *bitgen_state, npy_intp cnt, float *out)#
void random_standard_exponential_inv_fill_f(bitgen_t *bitgen_state, npy_intp cnt, float *out)#
float random_standard_normal_f(bitgen_t *bitgen_state)#
float random_standard_gamma_f(bitgen_t *bitgen_state, float shape)#
double random_normal(bitgen_t *bitgen_state, double loc, double scale)#
double random_gamma(bitgen_t *bitgen_state, double shape, double scale)#
float random_gamma_f(bitgen_t *bitgen_state, float shape, float scale)#
double random_exponential(bitgen_t *bitgen_state, double scale)#
double random_uniform(bitgen_t *bitgen_state, double lower, double range)#
double random_beta(bitgen_t *bitgen_state, double a, double b)#
double random_chisquare(bitgen_t *bitgen_state, double df)#
double random_f(bitgen_t *bitgen_state, double dfnum, double dfden)#
double random_standard_cauchy(bitgen_t *bitgen_state)#
double random_pareto(bitgen_t *bitgen_state, double a)#
double random_weibull(bitgen_t *bitgen_state, double a)#
double random_power(bitgen_t *bitgen_state, double a)#
double random_laplace(bitgen_t *bitgen_state, double loc, double scale)#
double random_gumbel(bitgen_t *bitgen_state, double loc, double scale)#
double random_logistic(bitgen_t *bitgen_state, double loc, double scale)#
double random_lognormal(bitgen_t *bitgen_state, double mean, double sigma)#
double random_rayleigh(bitgen_t *bitgen_state, double mode)#
double random_standard_t(bitgen_t *bitgen_state, double df)#
double random_noncentral_chisquare(bitgen_t *bitgen_state, double df, double nonc)#
double random_noncentral_f(bitgen_t *bitgen_state, double dfnum, double dfden, double nonc)#
double random_wald(bitgen_t *bitgen_state, double mean, double scale)#
double random_vonmises(bitgen_t *bitgen_state, double mu, double kappa)#
double random_triangular(bitgen_t *bitgen_state, double left, double mode, double right)#
npy_int64 random_poisson(bitgen_t *bitgen_state, double lam)#
npy_int64 random_negative_binomial(bitgen_t *bitgen_state, double n, double p)#
type binomial_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_int64 random_binomial(bitgen_t *bitgen_state, double p, npy_int64 n, binomial_t *binomial)#
npy_int64 random_logseries(bitgen_t *bitgen_state, double p)#
npy_int64 random_geometric_inversion(bitgen_t *bitgen_state, double p)#
npy_int64 random_geometric(bitgen_t *bitgen_state, double p)#
npy_int64 random_zipf(bitgen_t *bitgen_state, double a)#
npy_int64 random_hypergeometric(bitgen_t *bitgen_state, npy_int64 good, npy_int64 bad, npy_int64 sample)#
npy_uint64 random_interval(bitgen_t *bitgen_state, npy_uint64 max)#
void random_multinomial(bitgen_t *bitgen_state, npy_int64 n, npy_int64 *mnix, double *pix, npy_intp d, binomial_t *binomial)#
int random_multivariate_hypergeometric_count(bitgen_t *bitgen_state, npy_int64 total, size_t num_colors, npy_int64 *colors, npy_int64 nsample, size_t num_variates, npy_int64 *variates)#
void random_multivariate_hypergeometric_marginals(bitgen_t *bitgen_state, npy_int64 total, size_t num_colors, npy_int64 *colors, npy_int64 nsample, size_t num_variates, npy_int64 *variates)#

產生單一整數

npy_int64 random_positive_int64(bitgen_t *bitgen_state)#
npy_int32 random_positive_int32(bitgen_t *bitgen_state)#
npy_int64 random_positive_int(bitgen_t *bitgen_state)#
npy_uint64 random_uint(bitgen_t *bitgen_state)#

產生在閉區間 [off, off + rng] 內的隨機 uint64 數字。

npy_uint64 random_bounded_uint64(bitgen_t *bitgen_state, npy_uint64 off, npy_uint64 rng, npy_uint64 mask, bool use_masked)#