Рассчитать стандартное отклонение массива целых в одном за цикл, не зная заранее среднего - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть массив чисел, для которого мне нужно рассчитать стандартное отклонение. Я хочу сделать это за один for l oop цикл и заранее не знаю среднего значения массива:

int[] numbers = new int[] {1, 2, 3, 5};
int sum = 0;
double sumOfSquares = 0;
for (int number: numbers)  {
  sum += number;
  sumOfSquares += number * number; //don't know average yet
}
int average = sum / numbers.length;
double standardDeviation = //?

Я знаю, что стандартное отклонение можно рассчитать по следующей формуле:

Formula1: sqrt((each element - average)^2)

Но это требует, чтобы я уже знал значение среднего по I oop через элементы в массиве.

Есть ли другой способ сделать это? Я слышал, что есть еще одна формула, в которой сначала нужно найти сумму квадратов каждого элемента, а затем, когда l oop превысит применение среднего, но я не могу ее найти.

1 Ответ

1 голос
/ 27 апреля 2020

Согласно Википедии вы можете использовать формулу, которая требует только одного l oop, если число значений является конечным и имеет равную вероятность, что, кажется, имеет место здесь.

int[] numbers = new int[] {1, 2, 3, 5};
double squareSum = 0;
double sum = 0;

for (int value : numbers) {
    squareSum += value * value;
    sum += value;
}

double average = sum / numbers.length;
double standDev = Math.sqrt(squareSum / numbers.length - average * average);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...