gpt4 book ai didi

c++ - 在 C++ 中获取浮点 vector 的 vector 的逐元素平均值

转载 作者:搜寻专家 更新时间:2023-10-31 00:27:41 24 4
gpt4 key购买 nike

假设我有以下相同大小的 vector vector :

std::vector<float> a({1, 1, 1});
std::vector<float> b({2, 2, 2});
std::vector<float> c({4, 4, 5});

我想得到元素方面的平均 vector :

std::vector<float> mean({2.333, 2.333, 2.666});

实现此目标的最优雅方法是什么?我可以编写 for 循环来执行此操作,但想知道是否有更好的方法来执行此操作。

另请注意,我希望解决方案可以扩展到任意数量的 vector (为了举例,我使用了三个 vector )

最佳答案

对于元素操作,你应该使用 std::valarray .入门:

std::valarray<float> a { 1, 1, 1 };
std::valarray<float> b { 2, 2, 2 };
std::valarray<float> c { 4, 4, 5 };
std::valarray<float> mean = (a + b + c) / 3.f;
std::vector<float> v{std::begin(mean), std::end(mean)}

这适用于 GCC 7.2.1 的 C++11 模式。现在你还没有指定你是如何喂养载体的,所以你想要的还不清楚。如果您事先知道要处理多少 vector ,这应该可行:

std::valarray<float> foo(std::vector<std::valarray<float>> args) {
assert(args.size() > 0);

// sum MUST be initialized with a size
// and in this case, all sizes must be the same
// otherwise += is undefined behavior
std::valarray<float> sum(args[0].size());
for (auto c : args) {
sum += c;
}
return (sum / (float)args.size());
}

关于c++ - 在 C++ 中获取浮点 vector 的 vector 的逐元素平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48088876/

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