Console Library 4.7.0
A header-only library that makes C++ simple
Loading...
Searching...
No Matches
随机数工具

随机数生成、随机选择、随机打乱等实用函数。 More...

Functions

std::mt19937 & console::default_gen ()
 获取一个全局的、以当前时间戳为种子的 Mersenne Twister 随机数引擎。
void console::seed (unsigned int seed)
 修改 default_gen 提供的随机数引擎的种子。
template<class T = int>
console::randint (T min=0, T max=32767, std::mt19937 &gen=default_gen())
 生成一个指定范围内的随机整数(均匀分布)。
template<class T = double>
console::uniform (T min=0.0, T max=1.0, std::mt19937 &gen=default_gen())
 生成一个指定范围内的随机浮点数(均匀分布)。
template<class C>
auto console::choice (C &c, std::mt19937 &gen=default_gen()) -> decltype(*std::begin(c))
 从容器中随机选择一个元素(左值版本,返回引用)。
template<class C>
auto console::choice (C &&c, std::mt19937 &gen=default_gen()) -> std::remove_reference< decltype(*std::begin(c))>::type
 从容器中随机选择一个元素(右值版本,返回值)。
template<class T>
auto console::choice (std::initializer_list< T > init, std::mt19937 &gen=default_gen()) -> decltype(*std::begin(init))
 从 std::initializer_list 中随机选择一个元素(重载版本)。
template<class C>
void console::shuffle (C &&c, std::mt19937 &gen=default_gen())
 随机打乱容器中元素的顺序(Fisher-Yates 洗牌算法)。
template<class T = double>
std::vector< T > console::rnorm (size_t n, T mean=0.0, T sd=1.0, std::mt19937 &gen=default_gen())
 生成 n 个服从正态分布(Normal Distribution)的随机数。
template<class T = double>
std::vector< T > console::runif (size_t n, T min=0.0, T max=1.0, std::mt19937 &gen=default_gen())
 生成 n 个服从均匀分布(Uniform Distribution)的随机数。
template<class T = int>
std::vector< T > console::rbinom (size_t n, T size, double prob, std::mt19937 &gen=default_gen())
 生成 n 个服从二项分布(Binomial Distribution)的随机数。
template<class T = int>
std::vector< T > console::rpois (size_t n, double lambda, std::mt19937 &gen=default_gen())
 生成 n 个服从泊松分布(Poisson Distribution)的随机数。
template<class T = double>
std::vector< T > console::rexp (size_t n, T rate=1.0, std::mt19937 &gen=default_gen())
 生成 n 个服从指数分布(Exponential Distribution)的随机数。
template<class T = double>
std::vector< T > console::rgamma (size_t n, T shape, T rate=1.0, std::mt19937 &gen=default_gen())
 生成 n 个服从伽马分布(Gamma Distribution)的随机数。
template<class T = double>
std::vector< T > console::rbeta (size_t n, T shape1, T shape2, std::mt19937 &gen=default_gen())
 生成 n 个服从贝塔分布(Beta Distribution)的随机数。
template<class T = double>
std::vector< T > console::rchisq (size_t n, T df, std::mt19937 &gen=default_gen())
 生成 n 个服从卡方分布(Chi-squared Distribution)的随机数。
template<class T = double>
std::vector< T > console::rt (size_t n, T df, std::mt19937 &gen=default_gen())
 生成 n 个服从 t 分布(Student's t-distribution)的随机数。
template<class T = double>
std::vector< T > console::rf (size_t n, T df1, T df2, std::mt19937 &gen=default_gen())
 生成 n 个服从 F 分布(Fisher–Snedecor F-distribution)的随机数。
template<class T = double>
std::vector< T > console::rlnorm (size_t n, T meanlog=0.0, T sdlog=1.0, std::mt19937 &gen=default_gen())
 生成 n 个服从对数正态分布(Lognormal Distribution)的随机数。
template<class T = double>
std::vector< T > console::rweibull (size_t n, T shape, T scale=1.0, std::mt19937 &gen=default_gen())
 生成 n 个服从韦布尔分布(Weibull Distribution)的随机数。
template<class C>
auto console::sample (C &&c, size_t size, bool replace=false, std::mt19937 &gen=default_gen()) -> std::vector< typename std::iterator_traits< decltype(std::begin(c))>::value_type >
 从容器中随机抽取指定数量的元素(有放回或无放回)。
template<class T>
std::vector< T > console::sample (std::initializer_list< T > init, size_t size, bool replace=false, std::mt19937 &gen=default_gen())
 从 std::initializer_list 中随机抽样(重载版本)。

Detailed Description

随机数生成、随机选择、随机打乱等实用函数。

Function Documentation

◆ choice() [1/3]

template<class C>
auto console::choice ( C && c,
std::mt19937 & gen = default_gen() ) -> std::remove_reference< decltype(*std::begin(c))>::type

从容器中随机选择一个元素(右值版本,返回值)。

Template Parameters
C容器类型,必须支持 std::begin 和 std::end 迭代器以及 size() 方法。
Parameters
c要从中选择的容器(右值)。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::decay_t<decltype(*std::begin(c))> 所选元素的副本。
Exceptions
container_error如果容器为空。

◆ choice() [2/3]

template<class C>
auto console::choice ( C & c,
std::mt19937 & gen = default_gen() ) -> decltype(*std::begin(c))

从容器中随机选择一个元素(左值版本,返回引用)。

Template Parameters
C容器类型,必须支持 std::begin 和 std::end 迭代器以及 size() 方法。
Parameters
c要从中选择的容器(左值)。
gen使用的随机数引擎,默认为 default_gen()
Returns
decltype(*std::begin(c)) 所选元素的引用。
Exceptions
container_error如果容器为空。

◆ choice() [3/3]

template<class T>
auto console::choice ( std::initializer_list< T > init,
std::mt19937 & gen = default_gen() ) -> decltype(*std::begin(init))

从 std::initializer_list 中随机选择一个元素(重载版本)。

Template Parameters
T元素类型。
Parameters
init初始化列表。
gen使用的随机数引擎,默认为 default_gen()
Returns
decltype(*std::begin(init)) 所选元素的引用。
Exceptions
container_error如果初始化列表为空。

◆ default_gen()

std::mt19937 & console::default_gen ( )
inline

获取一个全局的、以当前时间戳为种子的 Mersenne Twister 随机数引擎。

该函数返回一个静态的 std::mt19937 对象的引用,引擎使用高精度时钟的当前时间点进行初始化。

Returns
std::mt19937& 随机数引擎的引用。

◆ randint()

template<class T = int>
T console::randint ( T min = 0,
T max = 32767,
std::mt19937 & gen = default_gen() )

生成一个指定范围内的随机整数(均匀分布)。

Template Parameters
T整数类型,默认为 int。
Parameters
min最小值(包含),默认为 0。
max最大值(包含),默认为 32767。
gen使用的随机数引擎,默认为 default_gen()
Returns
T 在 [min, max] 区间内的随机整数。

◆ rbeta()

template<class T = double>
std::vector< T > console::rbeta ( size_t n,
T shape1,
T shape2,
std::mt19937 & gen = default_gen() )

生成 n 个服从贝塔分布(Beta Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
shape1α 形状参数,shape1 > 0。
shape2β 形状参数,shape2 > 0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rbinom()

template<class T = int>
std::vector< T > console::rbinom ( size_t n,
T size,
double prob,
std::mt19937 & gen = default_gen() )

生成 n 个服从二项分布(Binomial Distribution)的随机数。

Template Parameters
T整数类型,默认为 int。
Parameters
n生成的随机数个数。
size每次试验的次数(trials)。
prob每次试验的成功概率(probability),取值范围 [0, 1]。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rchisq()

template<class T = double>
std::vector< T > console::rchisq ( size_t n,
T df,
std::mt19937 & gen = default_gen() )

生成 n 个服从卡方分布(Chi-squared Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
df自由度(degrees of freedom),df > 0。
gen使用的随机数引擎,默认为 default_gen()
Note
卡方分布是伽马分布的一个特例:χ²(k) = Gamma(k/2, 1/2)。
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rexp()

template<class T = double>
std::vector< T > console::rexp ( size_t n,
T rate = 1.0,
std::mt19937 & gen = default_gen() )

生成 n 个服从指数分布(Exponential Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
rate比率参数 λ(即 1/尺度),rate > 0。默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rf()

template<class T = double>
std::vector< T > console::rf ( size_t n,
T df1,
T df2,
std::mt19937 & gen = default_gen() )

生成 n 个服从 F 分布(Fisher–Snedecor F-distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
df1分子自由度,df1 > 0。
df2分母自由度,df2 > 0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rgamma()

template<class T = double>
std::vector< T > console::rgamma ( size_t n,
T shape,
T rate = 1.0,
std::mt19937 & gen = default_gen() )

生成 n 个服从伽马分布(Gamma Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
shape形状参数 k(α),shape > 0。
rate比率参数 β(即 1/尺度),rate > 0。默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Note
标准库实现使用的是尺度参数(scale = 1/rate),因此内部做了转换。
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rlnorm()

template<class T = double>
std::vector< T > console::rlnorm ( size_t n,
T meanlog = 0.0,
T sdlog = 1.0,
std::mt19937 & gen = default_gen() )

生成 n 个服从对数正态分布(Lognormal Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
meanlog取对数后的均值,默认为 0.0。
sdlog取对数后的标准差,sdlog > 0,默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rnorm()

template<class T = double>
std::vector< T > console::rnorm ( size_t n,
T mean = 0.0,
T sd = 1.0,
std::mt19937 & gen = default_gen() )

生成 n 个服从正态分布(Normal Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
mean分布的均值 μ,默认为 0.0。
sd分布的标准差 σ,默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rpois()

template<class T = int>
std::vector< T > console::rpois ( size_t n,
double lambda,
std::mt19937 & gen = default_gen() )

生成 n 个服从泊松分布(Poisson Distribution)的随机数。

Template Parameters
T整数类型,默认为 int。
Parameters
n生成的随机数个数。
lambda分布的均值 λ(同时也是方差),λ > 0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rt()

template<class T = double>
std::vector< T > console::rt ( size_t n,
T df,
std::mt19937 & gen = default_gen() )

生成 n 个服从 t 分布(Student's t-distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
df自由度(degrees of freedom),df > 0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ runif()

template<class T = double>
std::vector< T > console::runif ( size_t n,
T min = 0.0,
T max = 1.0,
std::mt19937 & gen = default_gen() )

生成 n 个服从均匀分布(Uniform Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
min下界(包含),默认为 0.0。
max上界(包含),默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ rweibull()

template<class T = double>
std::vector< T > console::rweibull ( size_t n,
T shape,
T scale = 1.0,
std::mt19937 & gen = default_gen() )

生成 n 个服从韦布尔分布(Weibull Distribution)的随机数。

Template Parameters
T浮点数类型,默认为 double。
Parameters
n生成的随机数个数。
shape形状参数 k,shape > 0。
scale尺度参数 λ,scale > 0。默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 包含 n 个随机数的向量。

◆ sample() [1/2]

template<class C>
auto console::sample ( C && c,
size_t size,
bool replace = false,
std::mt19937 & gen = default_gen() ) -> std::vector< typename std::iterator_traits< decltype(std::begin(c))>::value_type >

从容器中随机抽取指定数量的元素(有放回或无放回)。

Template Parameters
C容器类型,必须支持 std::begin 和 std::end 迭代器。
Parameters
c要抽样的容器。
size抽取的元素数量。
replace是否允许重复抽取(有放回),默认为 false。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<typename std::remove_reference_t<decltype(*std::begin(c))>> 抽取结果的向量。
Exceptions
container_error如果容器为空,或 size 超过容器大小且 replace==false。
Note
对非随机访问容器效果不佳,这并非设计缺陷。

◆ sample() [2/2]

template<class T>
std::vector< T > console::sample ( std::initializer_list< T > init,
size_t size,
bool replace = false,
std::mt19937 & gen = default_gen() )

从 std::initializer_list 中随机抽样(重载版本)。

Template Parameters
T元素类型。
Parameters
init初始化列表。
size抽取的元素数量。
replace是否允许重复抽取(有放回),默认为 false。
gen使用的随机数引擎,默认为 default_gen()
Returns
std::vector<T> 抽取结果的向量。

◆ seed()

void console::seed ( unsigned int seed)
inline

修改 default_gen 提供的随机数引擎的种子。

Parameters
新的种子。

◆ shuffle()

template<class C>
void console::shuffle ( C && c,
std::mt19937 & gen = default_gen() )

随机打乱容器中元素的顺序(Fisher-Yates 洗牌算法)。

Template Parameters
C容器类型,必须支持 std::begin 和 std::end 迭代器、size() 以及 swap 操作。
Parameters
c要打乱的容器(支持左值或右值引用)。
gen使用的随机数引擎,默认为 default_gen()

◆ uniform()

template<class T = double>
T console::uniform ( T min = 0.0,
T max = 1.0,
std::mt19937 & gen = default_gen() )

生成一个指定范围内的随机浮点数(均匀分布)。

Template Parameters
T浮点数类型,默认为 double。
Parameters
min最小值(包含),默认为 0.0。
max最大值(包含),默认为 1.0。
gen使用的随机数引擎,默认为 default_gen()
Returns
T 在 [min, max] 区间内的随机浮点数。