【发布时间】:2016-11-15 01:49:41
【问题描述】:
我想生成一个大小为p 的数组/向量v,其中t 为1,p-t 为0。 t 的位置必须是随机的。
这是我迄今为止编写的解决方案,但我不确定它是否是最有效的解决方案。另外我之前没用过random_device或者mt19937(发现他们here),所以不知道有什么缺点。
#include <algorithm>
#include <random>
#include <vector>
...
int p=10, t=3;
std::vector<int> v(p,0);
for(int i=0;i<t;i++) //better way?
v[i] = 1;
std::random_device rd;
std::mt19937 g(rd());
std::shuffle(std::begin(v), std::end(v), g);
这是我试图重现的 matlab 代码:
rp = randperm(p);
I_s(i,:) = rp(1:t);
v = zeros(p,1);
v(I_s(i,:)) = 1;
【问题讨论】:
-
std::fill可能会替换您的循环。 -
顺便说一句,codereview.stackexchange.com 可能是一个更好的地方。
-
这看起来不像“位向量”。它是简单的整数向量!
-
@Jarod42 感谢您的提示,我认为 std::fill_n 甚至是更好的解决方案。是的,也许 codereview.stackexchange.com 是一个更好的地方,希望一些管理员移动它
-
@justHelloWorld 你可以修改标记并要求他们移动它。
标签: c++ matlab vector random bit