Как рассчитать среднеквадратичное отклонение, если среднее значение неизвестно? Пусть есть некоторый очень, очень большой файл, где в каждой строке числа, для простоты - целые.
Рассчитать среднее значения через формулу сумма/кол-во нельзя, т.к. файл огромен, в оперативку сумма не поместится (просто смеритесь с этим!). Поэтому я придумал форму (наверняка не я первый):((i-1) * avg + nextValue) / i гдеi - это текущее кол-во рассчитанных чисел (текущий шаг начиная с 1);avg - текущее среднее значение;nextValue - следующее значение (из файла).
Например:
3
3
6
читаем построчно
для 3: (0 * 0 + 3) / 1 = 3
для 3: (1 * 3 + 3) / 2 = 3
для 6: (2 * 3 + 6) / 3 = 4
т.е. в любой момент можно остановиться и узнать текущее средн. арифм. значение.Итого: Среднее значение меняется на каждом шаге, а в будущее заглянуть не дано.Вопрос: как узнать среднеквадратичное отклонение, если для него нужно заранее узнать среднее значение? Википедия: Среднеквадратическое отклонениеP.S. Пожалуйста, учтите, что файл очень большой. Представьте себе, самый мощный супер компьютер и SSD диском бесконечно большого объёма (но с ничтожной ОЗУ) будет считывать данные неделями. И остановится он по сигналу, после чего должен сразу же выдать ответ, а не начать считывание повторно (зная среднее значение).

21 Авг 2019 в 06:10
147 +1
0
Ответы
1

Для рассчета среднеквадратичного отклонения без заранее известного среднего значения можно воспользоваться алгоритмом, который позволяет вычислять среднее значение и среднеквадратичное отклонение параллельно.

Вам понадобится две переменные: одна для хранения текущего среднего значения, а другая - для хранения текущего значения среднеквадратичного отклонения. Начнем с того, что обе переменные равны нулю.

C каждым новым числом из файла мы можем вычислять обновленное значение среднего:
new_avg = avg + (nextValue - avg) / i, где i - текущее количество чисел (начиная с 1), avg - текущее среднее значение, nextValue - следующее значение из файла.

При этом, чтобы обновить значение среднеквадратичного отклонения, нужно использовать следующую формулу:
new_std_dev = std_dev + (nextValue - avg) * (nextValue - new_avg).

Таким образом, вы сможете сохранять актуальное среднее значение и среднеквадратичное отклонение на каждом шаге обработки данных из файла. Когда обработка завершится, у вас будут актуальные значения среднего и среднеквадратичного отклонения, которые можно использовать для дальнейших расчетов.

20 Апр в 13:22
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 84 706 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир