C++ 包含双精度的向量
我需要计算向量内值的平均值、中值和s.d。我可以对向量进行排序以找出中间值,但是有没有更简单的方法来找到平均值和标准偏差,而不是将数据相加?为了找到平均值,只需将向量内容相加即可。您可以在不首先对向量进行实际排序的情况下找到中值,但计算未排序向量上的中值的算法几乎肯定比排序后要复杂得多。另外,我很确定,如果你计算在一个未排序的向量上找到中值的时间,它几乎肯定会超过排序和提取中值的时间总和。如果你只是为了技术挑战,我会为你写一个C++ 包含双精度的向量,c++,C++,我需要计算向量内值的平均值、中值和s.d。我可以对向量进行排序以找出中间值,但是有没有更简单的方法来找到平均值和标准偏差,而不是将数据相加?为了找到平均值,只需将向量内容相加即可。您可以在不首先对向量进行实际排序的情况下找到中值,但计算未排序向量上的中值的算法几乎肯定比排序后要复杂得多。另外,我很确定,如果你计算在一个未排序的向量上找到中值的时间,它几乎肯定会超过排序和提取中值的时间总和。如果你只是为了技术挑战,我会为你写一个 由于您可能需要对向量进行排序,因此可以在排序时计算平均值。您可以使用
由于您可能需要对向量进行排序,因此可以在排序时计算平均值。您可以使用std::nth\u元素找到中值。与显然流行的观点相反,这通常比排序快,然后找到中间元素-它通常是线性的,而排序通常是对数N 要为平均值添加元素,可以使用std::accumulate,类似于:
double total = std::accumulate(std::begin(v), std::end(v), 0.0);
[注意:根据编译器的使用年限,您可能需要使用v.begin和v.end而不是beginv和ndv`.]
计算方差已包含在一份报告中。标准差只是方差的平方根。 < P>编辑:没有看到C++标签! 如果您使用的是一种提供函数式编程工具的语言,则可以使用+函数折叠向量,然后除以其长度来表示平均值 对于stddev,您可以使用lambda:x->x-mean^2并用+折叠结果
它的计算效率并不高,但它可能会节省很多开发人员的时间 在说这句话之前,我想了两次:你尝试了什么?有一个累加算法。精确地添加内容有什么困难?在日志N上排序要比在日志N上添加内容花费更长的时间。但是,要找到中间值,您不需要进行完整排序,请看您在这里失去了我。。。如果计算在未排序的向量上找到中值的时间,几乎可以肯定的是,它将超过在C++中相关的高阶函数上排序和提取中值信息的组合时间: