如何在不知道总项目的情况下逐步计算平均值?

时间:2017-01-02 02:20:15

标签: php arrays math average stat

(PHP语言 - 这个问题适用于任何语言,特别是我使用的是PHP) 例如,您有一组数字,如:

$q = array( 1, 2, 3, 4, 5, ... ); // ... mean you can give more numbers
$i = 0;
$currentAverage = 0;
while ($i < count( $q )) {
    $currentAverage = ($currentAverage + $q[$i]) / 2;  // this is my try
    $i++;
}

echo "The final average is: " . $currentAverage . "<br/>";

很明显,你可以除以count( $q )总和,但这不是主意。

我希望你能帮助我!感谢。

2 个答案:

答案 0 :(得分:2)

可以使用这个:

#N Max
#O Tim Coe
#C A spacefiller that fills space with zebra stripes.
#C www.conwaylife.com/wiki/index.php?title=Max
x = 27, y = 27, rule = s23/b3
18bo8b$17b3o7b$12b3o4b2o6b$11bo2b3o2bob2o4b$10bo3bobo2bobo5b$10bo4bobo
bobob2o2b$12bo4bobo3b2o2b$4o5bobo4bo3bob3o2b$o3b2obob3ob2o9b2ob$o5b2o
5bo13b$bo2b2obo2bo2bob2o10b$7bobobobobobo5b4o$bo2b2obo2bo2bo2b2obob2o
3bo$o5b2o3bobobo3b2o5bo$o3b2obob2o2bo2bo2bob2o2bob$4o5bobobobobobo7b$
10b2obo2bo2bob2o2bob$13bo5b2o5bo$b2o9b2ob3obob2o3bo$2b3obo3bo4bobo5b4o
$2b2o3bobo4bo12b$2b2obobobobo4bo10b$5bobo2bobo3bo10b$4b2obo2b3o2bo11b$
6b2o4b3o12b$7b3o17b$8bo!

答案 1 :(得分:1)

如果不知道构成该平均值的项目总数,则无法计算“增量”平均值。

例如,如果您有10个平均为5的项目,并且您想要添加下一个项目X,则必须为新添加的项目提供适当的“权重”。

例如,要获得下一个平均值,您可以

(currentAverage * currentNumberOfItems + X) / (currentNumberOfItems + 1)

如果我们说X为7,则新的平均值为

(5 * 10 + 7) / (10 + 1)
= (50 + 7) / 11
= 57 / 11
= 5.181818182

不可能进行此计算而不知道预先构成平均值的项目的当前数量(10)

为了向您展示这种增量方式,这里有一个for循环,用于跟踪循环运行时的平均值

$xs = [1,2,3,4,5];
$average = $xs[0];
for ($count = 1; $count < count($xs); $count++) {
  echo sprintf("average: %0.3f, count: %d" . PHP_EOL, $average, $count);
  $average = ($average * $count + $xs[$count]) / ($count + 1);
}

average: 1.000, count: 1
average: 1.500, count: 2
average: 2.000, count: 3
average: 2.500, count: 4