gpt4 book ai didi

c++ - 使用具有取自数据结构的权重的 C++ 离散分布

转载 作者:行者123 更新时间:2023-12-04 15:09:57 24 4
gpt4 key购买 nike

我正在尝试使用 discrete distribution ( here too 。然而,正如您在示例中看到的那样,您可以通过以下方式做到这一点:

std::discrete_distribution<int> distribution {2,2,1,1,2,2,1,1,2,2};

 std::discrete_distribution<> d({40, 10, 10, 40});

如果您有 10 个或 4 个带权重的元素,这很好。 (我也不知道括号是否必要)

但我想将其用于 1000 个元素。我将这些元素放在一个结构 vector 中,例如:

struct Particle{
double weight;
};

std::vector<Particle> particles;

如您所见,该 vector 的每个元素都有一个权重。我想使用该权重来初始化离散分布。

我可以用一个很长的句子一个一个地写,但我不认为那样做。如何将 vector 的权重放在离散分布的声明中?

最佳答案

您可以将所有权重放入 std::vector<double> weights; ,然后您可以将离散分布初始化为 std::discrete_distribution<> distr(weights.begin(), weights.end()); .代码:

std::vector<double> weights;
for (auto const & p: particles)
weights.push_back(p.weight);
std::discrete_distribution<> distr(weights.begin(), weights.end());

完整的示例代码:

Try it online!

#include <random>
#include <vector>
#include <iostream>

int main() {
struct Particle {
double weight = 0;
};
std::vector<Particle> particles({{1}, {2}, {3}, {4}});
std::vector<double> weights;
for (auto const & p: particles)
weights.push_back(p.weight);
std::discrete_distribution<size_t> distr(weights.begin(), weights.end());
std::random_device rd;
for (size_t i = 0; i < 20; ++i)
std::cout << distr(rd) << " ";
}

输出:

1 3 3 3 2 0 2 1 3 2 3 2 2 1 1 3 1 0 3 1 

关于c++ - 使用具有取自数据结构的权重的 C++ 离散分布,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65377120/

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