Примечание. Это №3 в серии задач по обработке массивов . Для предыдущего вызова нажмите здесь .
Скользящая средняя списка
Скользящее среднее из списка является вычисление приводит к новому, сглаживаются список, созданного путем усреднения небольших перекрывающихся подсписков оригинала.
При создании скользящего среднего мы сначала генерируем список перекрывающихся подсписков, используя определенный «размер окна», каждый раз сдвигая это окно вправо.
Например, учитывая список [8, 4, 6, 2, 2, 4]
и размер окна 3
, подсписки будут:
[8, 4, 6, 2, 2, 4] Sublists:
( ) <- [8, 4, 6]
( ) <- [4, 6, 2]
( ) <- [6, 2, 2]
( ) <- [2, 2, 4]
Затем мы вычисляем среднее значение каждого подсписка, чтобы получить результат: [6.0, 4.0, 3.3, 2.7]
(каждое значение округляется до одного десятичного знака).
Соревнование
Ваша задача - написать программу или функцию, которая, учитывая список L и целое число 1 ≤ n ≤ length (L) , вычисляет скользящее среднее для L, используя размер окна n .
Правила:
- Ваша программа может использовать целочисленное деление или деление с плавающей запятой. В случае деления с плавающей запятой допускаются небольшие неточности из-за ограничений типа данных, при условии, что значение является правильным.
- Вы можете отправить полную программу или функцию (но не фрагмент).
- Вы можете предположить, что список будет содержать только положительные целые числа .
- Стандартные лазейки запрещены.
- Это код-гольф , поэтому выигрывает самый короткий ответ (в байтах)!
Тестовые случаи
Обратите внимание, что для удобства чтения все значения округлены до одного десятичного знака.
n=5, [1, 2, 3, 4, 5, 6, 7, 8] -> [3, 4, 5, 6]
n=3, [100, 502, 350, 223, 195] -> [317.3, 358.3, 256]
n=1, [10, 10, 10] -> [10, 10, 10]
n=3, [10, 20, 30] -> [20]
n=2, [90, 40, 45, 100, 101] -> [65, 42.5, 72.5, 100.5]
Ответы:
Желе , 3 байта
Попробуйте онлайн!
Довольно просто благодаря
ṡ
Как это устроено
источник
Wolfram Language (Mathematica) , 13 байт
Mathematica имеет встроенный для всего
Попробуйте онлайн!
Принимает список, а затем радиус ...
источник
MovingAverage
ಠ _____ ಠ Я отказываюсь верить в этоMovingAverage
возвращает набор дробей. Теперь, когда это разрешено ФП, этогоMovingAverage
должно быть достаточно.Haskell , 47 байтов
Попробуйте онлайн!
Сохранено два байта благодаря xnor!
источник
tail a
можно извлечь в охрану.Дьялог АПЛ, 4 байта
1 байт сохранен благодаря @Graham
2 байта сохранены благодаря @ jimmy23013
Я упоминал, что APL не является языком игры в гольф?
с
n
справа, илис
L
справа.Попробуйте онлайн!
Как?
÷
- разделитьL
наn
⊢+/
- уменьшить+
на окнахn
источник
Python , 48 байт
Попробуйте онлайн!
Рекурсивная функция. Короче программы (50 байт)
Попробуйте онлайн!
Это экономит 2 байта, завершаясь с ошибкой в
while
условии.источник
Подключить , 3 байта
Попробуйте онлайн!
источник
Perl 6 , 33 байта
Проверь это
Expanded:
источник
C
868483 байтаПопробуйте онлайн!
раскатали:
источник
J,
75 байтПопробуйте онлайн!
Принимает
n
за правый аргумент, а список за левый. Благодарю решение Уриэля за идею делать только суммирование в инфиксе.объяснение
Предыдущее решение (7 байт)
источник
Ом v2 , 3 байта
Попробуйте онлайн!
Объяснение:
источник
Pyth , 5 байт
Попробуй это здесь!
Как это работает
источник
Октава ,
3331 байтПопробуйте онлайн!
объяснение
Свертка (
conv
) по сути является движущейся взвешенной суммой. Если веса выбраны как[1/n, ..., 1/n]
(полученные как~~(1:n)/n
), результатом является скользящее среднее, из которого'valid'
сохраняется только часть.источник
R , 72 байта
Попробуйте онлайн!
Вычисляет окна
mean
всех размеровn
; когда окно выходит за границыl
, результатыNA
мы фильтруем.Пакет R + zoo, 13 байт
zoo
Пакет (S3 инфраструктура для регулярных и нерегулярных временных рядов) имеет много полезных функции. Вы можете попробовать это здесь (R-скрипка) .источник
Japt v2.0a0, 7 байт
Попытайся
объяснение
Неявный ввод массива
U
и целого числаV
.Получить подразделы
U
с длинойV
Карта над подразделами.
Разделите каждый элемент на
V
.Суммируйте все элементы.
источник
Python 3 , 61 байт
Попробуйте онлайн!
источник
Python 3 , 55 байт
Попробуйте онлайн!
источник
05AB1E , 5 байтов
Объяснение:
Попробуйте онлайн!
источник
Mathematica, 21 байт
Попробуйте онлайн!
-3 байта Юнг Хван Мин
источник
N[Mean/@##~Partition~1]&
Протон , 46 байт
Попробуйте онлайн!
Обратите внимание, что он принимает ввод через синтаксис функций каррирования и возвращает список дробей.
источник
CJam,
1412 байтов-2 байта благодаря @aditsu
источник
Jq 1,5 , 61 байт
расширенный
Попробуйте онлайн!
источник
JavaScript (ES6), 53 байта
источник
PHP, 94 байта
Попробуйте онлайн!
источник
Clojure , 48 байтов
Попробуйте онлайн!
источник
Stacked , 22 байта
Попробуйте онлайн!
объяснение
infixes
генерирует все окна заданной длины. Затем мы отображаем нашу собственную среднюю функцию для каждого инфикса.источник
Common Lisp , 77 байт
Попробуйте онлайн!
источник
K (ок) ,
1311 байтРешение:
Попробуйте онлайн!
Примеры:
Объяснение:
oK
имеет встроенную функцию для создания скользящего окна, затем суммирует полученные массивы и делит на размер скользящего окна, чтобы получить среднее значение:источник
x%[commute]
влево и отбросить пареныDataWeave , 50 байтов
источник
Фанки ,
6766 байтСохраненный байт с синтаксисом карри.
Попробуйте онлайн!
источник
Java 8, 111 байт
Объяснение:
Попробуй это здесь.
источник