我想生成一个数组/向量v
大小的p
with t
那些和p-t
零。的位置t
ones must是随机的。
这是我迄今为止编写的解决方案,但我不确定它是否是最有效的解决方案。另外我从来没用过random_device
or mt19937
(找到他们here http://en.cppreference.com/w/cpp/algorithm/random_shuffle)之前,所以我不知道可能有什么缺点。
#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;
演示在这里! http://ideone.com/Huceoh
std::shuffle(std::begin(v), std::end(v), g);
不会使位位置随机,它只是随机更改向量中现有项目(全部具有零位置位集)的位置。
如果我正确理解你的要求,你实际上应该拥有的是这样的:
std::random_device rd;
std::mt19937 g(rd());
for(int i=0;i<t;i++)
v[i] = 1 << rd(); // set a random bit position
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)