Как рассчитать среднее значение постепенно, не зная общего количества предметов?

(Язык 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 ) сумма, но это не идея.

Я надеюсь, что вы можете помочь мне! Благодарю.

0

Решение

Могли бы использовать это:

$q = array( 1, 2, 3, 4, 5, ... ); // ... mean you can give more numbers
$i = 0;
$currentAverage = 0;
while ($i < count( $q )) {
$sliceArr = array_slice($q, 0, $i+1);
$currentAverage = array_sum($sliceArr) / count($sliceArr);
$i++;
}

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

Другие решения

Вы не можете вычислить «среднее» среднее значение, не зная, что общее количество элементов составляет это среднее значение.

Например, если у вас есть 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
1

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector