我有一个bool矢量,例如:
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(或类似)
编写我自己的函数已被证明是繁琐而耗时且容易出错。是否有一个我无法找到的功能呢?
感谢。
答案 0 :(得分:1)
如果有人得到这个并且需要一个答案(而不是像上面的评论那样争论语义)我解决了这个问题如下,一步一步地用伪代码解释:
1)创建一个向量,随机改变值,计算1并将其作为所需的数量,然后将其全部设置为0。现在,您有一个所需数量的1作为目标,在矢量中均匀分布。 2)使用matlabs linspace函数的C ++实现(可在此处找到一些变体:https://gist.github.com/jmbr/2375233)。当你输入你想要多少1和矢量大小时,它会返回等距点,你可以向下舍入以在向量中创建索引。 3)将这些点设置为1。
结果是一个完美间隔的矢量。