(Язык 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 )
сумма, но это не идея.
Я надеюсь, что вы можете помочь мне! Благодарю.
Могли бы использовать это:
$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/>";
Вы не можете вычислить «среднее» среднее значение, не зная, что общее количество элементов составляет это среднее значение.
Например, если у вас есть 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