生成带有 t 个随机向量的位向量
Generate bit vector with t random ones
我想生成一个大小为 p
的数组/向量v
,其中包含 t
个 1 和 p-t
个零。t
的位置必须是随机的。
这是我到目前为止编写的解决方案,但我不确定它是否是最有效的解决方案。此外,我以前从未使用过random_device
或mt19937
(在这里找到它们),所以我不知道可能的缺点是什么。
#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::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
相关文章:
- 如果不初始化结构中的向量,它会自动为空还是具有随机内存位置的值?
- 指向用随机指针归档的其他类对象的指针的c++向量
- 我怎样才能在不重复的情况下随机迭代向量的每个元素
- 从长(且合理)稀疏向量中选择随机元素的最有效方法是什么?
- C++ 生成随机向量
- 随机访问元组向量中的元组值
- 将一个随机的字符序列和int序列解析为单独的向量
- 从C++向量中随机选取
- C++线程的向量在连接时随机崩溃
- C 从向量的子集返回一个随机值
- 使用随机值初始化 2D 向量
- 多次随机向量后的读取访问冲突
- 随机采样C++中具有权重的元组的向量
- 如何使用 std::shuffle 以随机顺序对具有唯一指针的向量进行洗牌
- 从另一个向量制作随机配对向量
- 使用 std::find 在向量中定位随机生成的数字
- 创建一个随机的std ::向量,其中一个和零C
- 尝试创建随机整数向量时的OpenMPI编译器错误
- 如何从向量中获取随机和唯一值?
- 使用 和 函数生成随机双向量<random>