![](/img/trans.png)
[英]How to uniform spread every k values over a collection of n values with k <= n?
[英]Uniform Spread of boolean values in a vector
我有一个布尔向量,例如:
vector<bool> bVec;
我使用回推在循环中用随机的1和0填充它:
bVec.push_back(0);
bVec.push_back(1);
我可以随机播放内容:
random_shuffle(bVec.begin(), bVec.end());
对于随机混洗的向量来说,这很好用,但是,如果我想要均匀分布的值,我似乎无法获得适当的向量。 即我想计算1和0的数量,并尽可能均匀地分布它们。 例如,如果我有3个1和7个0,我会想要像0,1,0,0,1,0,0,1,0,0(或类似的东西)
事实证明,编写自己的函数很花时间,而且很容易出错。 有没有我找不到的功能可以做到这一点?
谢谢。
万一有人遇到这个问题并需要一个答案(而不是像上面的评论那样争论语义),我按以下步骤解决了问题,并在伪代码中逐步说明了这一点:
1)创建一个向量,随机地将值随机混入,计算1并将其用作所需的数量,然后将其全部设置回0。 现在,您有一个期望的1数作为目标,可以在向量中均匀分布。 2)使用Matlabs linspace函数的C ++实现(可以在这里找到一些变体: https ://gist.github.com/jmbr/2375233)。 输入所需的1和向量的大小时,它将返回等距点,您可以向下舍入以在向量中创建索引。 3)将这些点设置为1。
结果是一个完美间隔的向量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.