Nota: Este es el n. ° 3 en una serie de desafíos de manipulación de matrices . Para el desafío anterior, haga clic aquí .
Media móvil de una lista
El promedio móvil de una lista es un cálculo que resulta en una nueva lista suavizada, creada promediando pequeñas sublistas superpuestas del original.
Al crear un promedio móvil, primero generamos la lista de sublistas superpuestas usando un cierto 'tamaño de ventana', desplazando esta ventana hacia la derecha una vez cada vez.
Por ejemplo, dada la lista [8, 4, 6, 2, 2, 4]y el tamaño de la ventana 3, las sublistas serían:
[8, 4, 6, 2, 2, 4] Sublists:
( ) <- [8, 4, 6]
( ) <- [4, 6, 2]
( ) <- [6, 2, 2]
( ) <- [2, 2, 4]
Luego calculamos el promedio promedio de cada sublista para obtener el resultado: [6.0, 4.0, 3.3, 2.7](cada valor redondeado a un decimal).
El reto
Su tarea es escribir un programa o función que, dada una lista L , y un número entero 1 ≤ n ≤ longitud (L) , calcule el promedio móvil para L usando el tamaño de ventana n .
Reglas:
- Su programa puede usar división entera o división flotante. En el caso de la división flotante, se permiten pequeñas inexactitudes debido a las limitaciones del tipo de datos, siempre que el valor sea correcto.
- Puede enviar un programa completo o una función (pero no un fragmento).
- Puede suponer que la lista solo contendrá enteros positivos .
- Las lagunas estándar están prohibidas.
- Este es el código de golf , por lo que gana la respuesta más corta (en bytes).
Casos de prueba
Tenga en cuenta que, para facilitar la lectura, todos los valores se redondean a un decimal.
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]

Respuestas:
Jalea , 3 bytes
Pruébalo en línea!
Bastante simple gracias a
ṡCómo funciona
fuente
Wolfram Language (Mathematica) , 13 bytes
Mathematica tiene una función incorporada para todo
Pruébalo en línea!
Toma una lista y luego un radio ...
fuente
MovingAverageಠ _____ ಠ Me niego a creer estoMovingAveragedevuelve un conjunto de fracciones. Ahora que ha sido permitido por el OP,MovingAveragedebería ser suficiente.Haskell , 47 bytes
Pruébalo en línea!
¡Ahorré dos bytes gracias a xnor!
fuente
tail aSe puede extraer en la guardia.Dyalog APL, 4 bytes
1 byte guardado gracias a @Graham
2 bytes guardados gracias a @ jimmy23013
¿Mencioné que APL no es un lenguaje de golf?
con
na la derecha, ocon
La la derecha.Pruébalo en línea!
¿Cómo?
÷- dividirLporn⊢+/- reducir+en ventanas denfuente
Python , 48 bytes
Pruébalo en línea!
Una función recursiva. Más corto que el programa (50 bytes)
Pruébalo en línea!
Esto ahorra 2 bytes al terminar con un error en la
whilecondición.fuente
Aliste , 3 bytes
Pruébalo en línea!
fuente
Perl 6 , 33 bytes
Pruébalo
Expandido:
fuente
C,
868483 bytesPruébalo en línea!
Desenrollado:
fuente
J,
75 bytesPruébalo en línea!
Toma
ncomo argumento correcto y la lista como la izquierda. Gracias a la solución de Uriel por la idea de hacer solo la suma en el infijo.Explicación
Solución anterior (7 bytes)
fuente
Ohm v2 , 3 bytes
Pruébalo en línea!
Explicación:
fuente
Pyth , 5 bytes
Pruébalo aquí!
Como funciona esto
.O.: F - Programa completo. F - Reduzca la entrada (lista anidada) con ... .: - ... Sublistas. .O - Promedio de cada uno.fuente
Octava ,
3331 bytesPruébalo en línea!
Explicación
La convolución (
conv) es esencialmente una suma ponderada móvil. Si los pesos se eligen como[1/n, ..., 1/n](obtenidos como~~(1:n)/n), el resultado es un promedio móvil, del cual solo'valid'se conserva la parte.fuente
R , 72 bytes
Pruébalo en línea!
Calcula el
meande todas lasnventanas de tamaño ; cuando la ventana pasa el borde del, los resultados sonNAasí que los filtramos.Paquete R + zoo, 13 bytes
El
zoopaquete (infraestructura S3 para series temporales regulares e irregulares) tiene muchas funciones útiles. Puedes probarlo aquí (R-fiddle) .fuente
Japt v2.0a0, 7 bytes
Intentalo
Explicación
Entrada implícita de matriz
Uy enteroV.Obtener subsecciones de
Ucon longitudVMapa sobre las subsecciones.
Divide cada elemento entre
V.Suma todos los elementos.
fuente
Python 3 , 61 bytes
Pruébalo en línea!
fuente
Python 3 , 55 bytes
Pruébalo en línea!
fuente
05AB1E , 5 bytes
Explicación:
Pruébalo en línea!
fuente
Mathematica, 21 bytes
Pruébalo en línea!
-3 bytes JungHwan Min
fuente
N[Mean/@##~Partition~1]&Protón , 46 bytes
Pruébalo en línea!
Tenga en cuenta que esto toma datos a través de la sintaxis de las funciones de curry y devuelve una lista de fracciones.
fuente
CJam,
1412 bytes-2 bytes gracias a @aditsu
fuente
Jq 1.5 , 61 bytes
Expandido
Pruébalo en línea!
fuente
JavaScript (ES6), 53 bytes
fuente
PHP, 94 bytes
Pruébalo en línea!
fuente
Clojure , 48 bytes
Pruébalo en línea!
fuente
Apilado , 22 bytes
Pruébalo en línea!
Explicación
infixesgenera todas las ventanas de la longitud dada. Luego, mapeamos nuestra propia función promedio sobre cada infijo.fuente
Lisp común , 77 bytes
Pruébalo en línea!
fuente
K (oK) ,
1311 bytesSolución:
Pruébalo en línea!
Ejemplos:
Explicación:
oKtiene una función integrada para crear una ventana deslizante, luego resume las matrices resultantes y divide por tamaño de ventana deslizante para obtener el significado:fuente
x%[commute]hacia la izquierda y soltar los parensDataWeave , 50 bytes
fuente
Funky ,
6766 bytesGuardado un byte con sintaxis de curry.
Pruébalo en línea!
fuente
Java 8, 111 bytes
Explicación:
Pruébalo aquí
fuente