Hum*_*Hum 4 c++ vector visual-c++
我有一个长度为 100 万(0 到 100 万)的数据向量 A。从 A 开始,我想创建包含 A 索引的向量 B(其长度可以说只是 A 的 10%)。这些索引是从 A 中随机抽取的样本索引。我尝试使用 srand() 和 random_shuffle,这是一个好方法吗?提取非常大的向量样本的方法?有人可以建议我吗?
std::vector <int> samplingIndex;
for (int i = 0; i < 1000000; ++i) { samplingIndex.push_back(i); }
std::srand(50);
std::random_shuffle(samplingIndex.begin(), samplingIndex.end());
Run Code Online (Sandbox Code Playgroud)
之后,我从采样索引中取出前 10% 的索引来制作 B。
您可以使用Fisher\xe2\x80\x93Yates shuffle,然后避免构造巨大的数组a
:
就像是:
\n// Fisher\xe2\x80\x93Yates_shuffle\nstd::vector<int> FisherYatesShuffle(std::size_t size,\n std::size_t max_size,\n std::mt19937& gen)\n{\n assert(size <= max_size);\n std::vector<int> res(size);\n\n for (std::size_t i = 0; i != max_size; ++i) {\n std::uniform_int_distribution<> dis(0, i);\n std::size_t j = dis(gen);\n if (j < res.size()) {\n if (i < res.size()) {\n res[i] = res[j];\n }\n res[j] = i;\n }\n }\n return res;\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n