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 estoMovingAverage
devuelve un conjunto de fracciones. Ahora que ha sido permitido por el OP,MovingAverage
debería ser suficiente.Haskell , 47 bytes
Pruébalo en línea!
¡Ahorré dos bytes gracias a xnor!
fuente
tail a
Se 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
n
a la derecha, ocon
L
a la derecha.Pruébalo en línea!
¿Cómo?
÷
- dividirL
porn
⊢+/
- reducir+
en ventanas den
fuente
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
while
condició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
n
como 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
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
mean
de todas lasn
ventanas de tamaño ; cuando la ventana pasa el borde del
, los resultados sonNA
así que los filtramos.Paquete R + zoo, 13 bytes
El
zoo
paquete (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
U
y enteroV
.Obtener subsecciones de
U
con longitudV
Mapa 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
infixes
genera 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:
oK
tiene 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