Générer un vecteur bit avec des valeurs aléatoires

Je veux générer un tableau / vecteur v de taille p avec t et pt zéros. La position des t doit être aléatoire.

C’est la solution que j’ai écrite jusqu’à présent, mais je ne sais pas si c’est la plus efficace. De plus, je n’avais jamais utilisé random_device ou mt19937 (les mt19937 trouvés ici ) auparavant, alors je ne sais pas quels sont les inconvénients possibles.

 #include  #include  #include  ... int p=10, t=3; std::vector 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); 

C’est le code matlab que j’essaie de reproduire:

 rp = randperm(p); I_s(i,:) = rp(1:t); v = zeros(p,1); v(I_s(i,:)) = 1; 

Démo ici!

 std::shuffle(std::begin(v), std::end(v), g); 

Ne rend pas la position du bit aléatoire, il modifie simplement les positions des éléments existants (qui ont tous le bit de position zéro défini) dans le vecteur de manière aléatoire.


Si j’ai bien compris votre exigence, vous devriez réellement avoir quelque chose comme:

 std::random_device rd; std::mt19937 g(rd()); for(int i=0;i