gpt4 book ai didi

c++ - 用 t 个随机数生成位 vector

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:12:42 26 4
gpt4 key购买 nike

我想生成一个数组/vector v,大小为 p,其中 t 为一,p-t 为零。 t 的位置必须是随机的。

这是我迄今为止编写的解决方案,但我不确定它是否是最有效的解决方案。此外,我以前从未使用过 random_devicemt19937 (发现它们 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;

Demo here!

最佳答案

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

不会使位位置随机,它只是随机更改 vector 中现有项(它们都设置了零位置位)的位置。


如果我正确理解了您的要求,您实际上应该拥有的是:

std::random_device rd;
std::mt19937 g(rd());
for(int i=0;i<t;i++)
v[i] = 1 << rd(); // set a random bit position

关于c++ - 用 t 个随机数生成位 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38335328/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com