gpt4 book ai didi

c++ - 基于另一个 vector c++中相似性的 vector 的条件平均

转载 作者:太空狗 更新时间:2023-10-29 20:59:30 25 4
gpt4 key购买 nike

最好举个例子。

假设 vector A 包括:

A = {3  ,2 ,1 ,4  ,6 ,3 ,8 ,4}

vector B包括:

B = {1.5,2 ,2 ,1.5,3 ,3 ,3 ,2}

vector B 中的唯一值是 {1.5, 2, 3}

我希望生成的 vector RESULT 为:

RESULT[0] = Average(A given B=1.5) = Average(3,4)

RESULT[1] = Average(A given B=2 ) = Average(2,1,4)

RESULT[2] = Average(A given B=3 ) = Average(6,3,8)

最有效的计算方法是什么。我自己的方法是循环遍历 B 的唯一元素,并针对每个元素循环遍历每个 B 值,尝试匹配该唯一数字,并在每次匹配中对 vector A 的相应元素求和,同时计算匹配次数我可以找到平均值。

这太慢了。因为我的 vector A 是 8M 个元素,而 vector B 包含 0.5M 个唯一值。

如有任何帮助,我们将不胜感激。

最佳答案

这是一个懒惰的想法:同步遍历两个 vector 并将结果聚合到一个单独的容器中。例如:

#include <cassert>
#include <cmath>
#include <iostream>
#include <map>
#include <utility>

std::map<double, std::pair<int, std::size_t>> m;

assert(A.size() == B.size());

for (std::size_t i = 0; i != A.size(); ++i)
{
assert(!std::isnan(B[i]));

auto & p = m[B[i]];
p.first += A[i];
p.second += 1;
}

最后你只报告结果:

for (const auto & p : m)
std::cout << "Average for bin " << p.first << " is "
<< static_cast<double>(p.second.first) / p.second.second
<< "\n";

(请注意,您的键值不能为 NaN:在有序映射中,NaN 不是严格排序的一部分;在无序映射中,它不等于自身。)

关于c++ - 基于另一个 vector c++中相似性的 vector 的条件平均,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24419441/

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