从列表中减去样本,更新平均值

时间:2017-05-03 10:05:45

标签: c++ math average stdmap

我的地图定义为:

std::map<float, std::map<unsigned short, int>>

浮点值是我保持平均值的值。速度快。短是标识符fx日期。整数是一个计数,我也跟踪它。计数表示已经有多少样本,具有该特定值。例如。在这个日期,我有一个'bin',其值为220 km / h。这个数字可能是2132。

如果我添加新样本,例如一辆开220的汽车,然后它落在一个特定的“垃圾箱”中以获得该速度和日期,我更新了平均值并计算如下:

    count++;
    average = average + ((samplevalue - average) / count);

这似乎工作正常,平均值已更新。

但我的问题是当我想删除特定标识符的条目时,例如一天。

for (auto& bin : *containerMap_)
{
    auto iter = bin.second.find(currentDay);
    if (iter != bin.second.end())
    {

        average = (( average  * count) - iter->first) / (count - (iter->second));
        meassurementCount -= iter->second;

        bin.second.erase(iter);

    }
}

此处iter->first是bin(速度)的值,iter->second是计数。

虽然当我删除特定标识符时,平均值不会按预期更新。 在我的测试用例中,我只插入一个速度的样本,所以我只有一个bin。每个速度都是3,所以我希望平均值保持为3.它使用insert,但是当我尝试从一个标识符(日)中删除时,平均值更新为:

Avg : 3.00139

为什么这个计算不起作用?我真的很讨厌通过一切来更新平均值,因为计数可能达到数十亿。

最好的问候:)

0 个答案:

没有答案