【发布时间】:2018-11-07 07:48:39
【问题描述】:
我的问题是如何从vec.begin() 到vec.end() 中选择n 个元素,这样我们几乎可以覆盖所有的向量元素?
vector<double> take_100_samples(vector<double>& in)
{
vector<double> vec(100);
double step = (in.size() - 1) / (100 - 1);
// sampling process
return vec;
}
例如,如果in 向量的大小为 200,我们选择它的每两个元素(即 in[0]、in[2]、in[4]、...、in[199])但如果大小为不能被 100 整除?
有没有有效的方法来做到这一点?
问候
【问题讨论】:
-
你想要的可能是std::sample
-
只取一个样本时,“覆盖所有元素”是什么意思?它是关于存储在向量中的值的范围吗?是要确保你至少拿第一个和最后一个吗?如果 in 向量的元素少于 100 个怎么办?
-
@Christophe 即对于尺寸为 200 和步骤 2 的 vec,我们几乎涵盖了所有元素......只是一个很好的步骤定义。并且我们总是确定输入向量的大小大于 100
-
我认为带有 random_device 的
std::sample在这里是不够的,因为它不会均匀地填充结果。这意味着 200 个元素不能保证每隔一个元素! -
没错,这个问题没有随机性,是均匀采样,不是随机均匀采样。