Excel: накопленный средний по строке?

Вопрос или проблема

У меня есть двумерный массив примерно из 100 строк и не более 12 столбцов. Я хочу преобразовать этот массив в накопленное среднее для каждой строки. Другими словами, аккумулятор будет сбрасываться в 0, когда мы начинаем новую строку.

Я придумал решение, которое работает (см. ниже), однако оно слишком медленное. Занимает около 10 секунд для массива 100 x 12. Надеюсь, есть более быстрое решение?

=MAKEARRAY(ROWS(array), 12, LAMBDA(r, c, AVERAGE(DROP(INDEX(array, r), c - 12))))

Ответ или решение

Теория:

Обработка двумерных массивов в Excel требует учета оптимизации формул для повышения производительности, особенно при работе с большими массивами данных. В данном случае речь идет о вычислении накопленного среднего значения по каждой строке массива 100 на 12 элементов. Проблема в том, что используемая формула работает медленно из-за своей сложности и пересчетов. Ключевым моментом является использование более эффективного способа расчета среднего, чтобы уменьшить время обработки.

Пример:

Изначальная формула использует функцию MAKEARRAY, которая создает таблицу, заполняемую формулой LAMBDA. Вложенная функция AVERAGE(DROP(INDEX(array, r), c - 12)) вызывает проблемы с производительностью, поскольку каждый раз выполняется операция DROP, изменяющая массив, что вводит дополнительную вычислительную нагрузку при обращении к значениям через INDEX.

Применение:

Более эффективным подходом будет использование функций Excel, которые уменьшают количество повторных пересчетов. Например, можно применить функции, работающие с диапазонами без излишнего индексирования. Одним из методов является использование AVERAGE совместно с OFFSET или INDIRECT, чтобы минимизировать динамическое изменение размеров диапазона.

Вместо использования DROP и LAMBDA, можно воспользоваться прямым обращением к диапазонам, соответствующим текущей строке:

  1. На одной из ячеек строки вы можете использовать следующую формулу, чтобы получить накопленное среднее для всех предыдущих столбцов в строке:

    =AVERAGE($A2:A2)

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

  2. Распространите формулу на всю таблицу остальными строками, начиная с первой ячейки каждой строки:

    • Выделите ячейку с формулой.
    • Распространите формулу вдоль строки и через нужное количество строк.

Этот метод значительно снизит нагрузку на Excel за счет работы с фиксированными диапазонами, что уменьшает объем переиндексирования и общей вычислительной нагрузки. Этот метод позволит быстрее получить результаты для массива 100 на 12.

Оцените материал
Добавить комментарий

Капча загружается...