我正在尝试将这行matlab代码转换为C++代码:rp = randperm(p);
根据randperm文档:
randperm使用与rand相同的随机数生成器。
而在rand
文档中:
rand返回一个符合均匀分布的单一随机数。
因此,rand
遵循均匀分布。我的C++代码基于以下内容:
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(... , ... ,g);
我的问题是:上面的代码遵循均匀分布吗?如果不是,怎么做到呢?
std::mt19937
应该是均匀的,如果你信任原作者的论文标题。而std::random_device
仅用于种子生成Mersenne Twister,因此它实际上不需要以任何方式均匀。 - mindriotstd::uniform_int_distribution
相比有什么区别呢? - justHelloWorldmt19937
是一个随机数引擎,它生成“原始”的随机数(32位或64位),这些随机数应尽可能均匀。uniform_int_distribution
将该随机输入转换为与特定分布相匹配的内容(例如在 {1,……6} 上均匀分布)。 - mindriotshuffle
构造其自身的分布,它只需要一个随机数生成器:engine。在标准库中,mt19937
是最好的。 - Revolver_Ocelotshuffle
,那么shuffle
是否不会产生不同概率的不同排列呢?如果不是,那么当它不知道生成器的特征时,它如何构建均匀的排列概率呢?因此,生成器必须是均匀的,对吗? - mindriot