Questions tagged «random»

该标签用于与随机数及其生成器有关的问题,无论是伪随机还是真正的随机。


2
Python中随机数最终数字的分布
在Python中,有两种显而易见的方法可以生成一个从0到9的随机数字。一个可以生成一个介于0和1之间的随机浮点数,再乘以10,然后四舍五入。或者,可以使用该random.randint方法。 import random def random_digit_1(): return int(10 * random.random()) def random_digit_2(): return random.randint(0, 9) 我很好奇,如果生成一个0到1之间的随机数并保留最后一位数字,将会发生什么。我不一定期望分布是均匀的,但是我发现结果非常令人惊讶。 from random import random, seed from collections import Counter seed(0) counts = Counter(int(str(random())[-1]) for _ in range(1_000_000)) print(counts) 输出: Counter({1: 84206, 5: 130245, 3: 119433, 6: 129835, 8: 101488, 2: 100861, 9: 84796, 4: 129088, …
24 python  random 

2
实际上,一个<random>随机数引擎中应该使用哪个?std :: mt19937?
假设您想&lt;random&gt;在实际程序中使用C ++ 工具(对于“实际”的某些定义-这里的约束是该问题的一部分)。您的代码大致如下: int main(int argc, char **argv) { int seed = get_user_provided_seed_value(argc, argv); if (seed == 0) seed = std::random_device()(); ENGINE g(seed); // TODO: proper seeding? go_on_and_use(g); } 我的问题是,您应该使用哪种类型ENGINE? 我以前经常说std::mt19937,是因为它可以快速键入并具有名称识别功能。但是这些天来,似乎每个人都在说 Mersenne Twister非常重且对缓存不友好,甚至没有通过其他人所做的所有统计测试。 我想说,std::default_random_engine因为这是显而易见的“默认值”。但是我不知道它在平台之间是否有所不同,并且我也不知道它在统计上是否有好处。 既然如今每个人都在64位平台上,我们至少应该使用std::mt19937_64over std::mt19937吗? 我想说pcg64还是xoroshiro128因为它们看起来受人尊敬且轻巧,但它们根本不存在&lt;random&gt;。 我不知道什么minstd_rand,minstd_rand0,ranlux24,knuth_b,等-当然,他们一定是好东西? 显然,这里存在一些竞争约束。 发动机强度。(&lt;random&gt;没有加密强度高的PRNG,但是,某些标准化的PRNG比其他的“弱”,对吧?) sizeof 引擎。 其速度operator()。 易于播种。mt19937众所周知,很难正确地植入种子,因为它有太多的状态要初始化。 库供应商之间的可移植性。如果一个供应商提供的foo_engine编号与另一供应商提供的编号不同foo_engine,则对某些应用程序不利。(希望这不排除任何可能,除非default_random_engine。) 尽可能权衡所有这些限制,您将说出最终的“最佳实践留在标准库中”的答案是什么?我应该继续使用std::mt19937还是什么?
21 c++  c++11  random 

3
有没有一种有效的方法可以在给定总和或平均值的范围内生成N个随机整数?
的恩惠到期在18小时。这个问题的答案有资格获得+200声望奖励。 Peter O.正在寻找一个规范的答案: 总结:(1)找到比代码中实现的算法更有效的算法,或者(2)陈述有效数量的公式。组合以及如何“取消排序”组合编号。 是否有一种有效的方法来生成N个整数的随机组合,从而使- 每个整数都在区间[ min,max]中, 整数之和为sum, 整数可以按任何顺序出现(例如,随机顺序),并且 从满足其他要求的所有组合中随机选择均匀组合吗? 对于随机组合,是否有一种类似的算法,其中整数必须按其值的排序顺序出现(而不是以任何顺序出现)? (如果是,mean则选择平均值为的适当组合是一个特殊情况sum = N * mean。此问题等效于生成由sumN个部分组成的均匀随机分区,每个部分在[[ ]] 区间中min,max并按其顺序以任何顺序或排序顺序出现值(视情况而定)。) 我知道,对于以随机顺序出现的组合,可以通过以下方式解决此问题(EDIT [Apr. 27]:算法已修改。): 如果N * max &lt; sum或N * min &gt; sum,则没有解决方案。 如果N * max == sum,则只有一个解,其中所有N数字都等于max。如果N * min == sum,则只有一个解,其中所有N数字都等于min。 使用 Smith和Tromble中给出的算法(“从单位单纯形抽样”,2004年),生成N个具有和的随机非负整数sum - N * min。 添加min到这种方式生成每个号码。 如果任何数字大于max,请转到步骤3。 但是,如果该算法max远小于,则该算法速度较慢sum。例如,根据我的测试(使用上述涉及的特殊情况的实现mean),该算法平均会拒绝- 约1.6个样本N = …

1
在R中对“样本”功能进行基准测试
我sample在R中对函数进行了基准测试,并将其与进行比较,igraph:sample_seq结果遇到了奇怪的情况。 当我运行类似: library(microbenchmark) library(igraph) set.seed(1234) N &lt;- 55^4 M &lt;- 500 (mbm &lt;- microbenchmark(v1 = {sample(N,M)}, v2 = {igraph::sample_seq(1,N,M)}, times=50)) 我得到这样的结果: Unit: microseconds expr min lq mean median uq max neval v1 21551.475 22655.996 26966.22166 23748.2555 28340.974 47566.237 50 v2 32.873 37.952 82.85238 81.7675 96.141 358.277 50 但是例如当我跑步时 set.seed(1234) N …
11 r  random 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.