Friday, 3 November 2017

Moving Average Python Numpy


Hmmm, parece que este citar a implementar la función es realmente muy fácil de equivocarse y ha fomentado una buena discusión sobre la eficiencia de la memoria. Me alegro de tener hinchazón si significa saber que algo se ha hecho bien. Ndash Richard Sep 20 14 at 19:23 NumPys carencia de una función específica de dominio específico es quizás debido a la disciplina de los Equipos Core y la fidelidad a NumPys principal directiva: proporcionar un tipo de matriz N-dimensional. Así como funciones para crear e indexar esas matrices. Como muchos objetivos fundacionales, este no es pequeño, y NumPy lo hace brillantemente. La SciPy (mucho) más grande contiene una colección mucho mayor de bibliotecas específicas de dominio (llamadas subpaquetes por SciPy devs), por ejemplo, optimización numérica (optimizar), procesamiento de señal (señal) y cálculo integral (integrar). Mi conjetura es que la función que está después está en por lo menos uno de los subpaquetes de SciPy (scipy. signal quizás) sin embargo, miraría primero en la colección de SciPy scikits. Identificar el (los) científico (s) relevante (s) y buscar la función de interés allí. Scikits son desarrollados independientemente paquetes basados ​​en NumPy / SciPy y dirigidos a una disciplina técnica particular (por ejemplo, scikits-image, scikits-learn, etc.) Varios de estos fueron (en particular, el impresionante OpenOpt para la optimización numérica) Proyectos mucho antes de optar por residir bajo la rúbrica relativamente nueva scikits. La página web de Scikits gustaba de listar alrededor de 30 tal scikits. Aunque al menos varios de ellos ya no están en desarrollo activo. Siguiendo este consejo te llevaría a scikits-timeseries sin embargo, ese paquete ya no está en desarrollo activo. En efecto, Pandas se ha convertido, AFAIK, la biblioteca de series de tiempo basada en NumPy. Pandas tiene varias funciones que se pueden utilizar para calcular un promedio móvil, el más simple de estos es probablemente rollingmean. Que se utiliza de la siguiente manera: Ahora, sólo tiene que llamar a la función rollingmean pasando en el objeto Series y un tamaño de ventana. Que en mi ejemplo a continuación es de 10 días. Verificar que funcionó - por ejemplo. Los valores comparados 10-15 en la serie original versus la nueva serie suavizado con la media de balanceo La función rollingmean, junto con una docena de otras funciones se agrupan informalmente en la documentación Pandas bajo la rubrica de funciones de ventana móvil un segundo grupo relacionado de funciones En Pandas se denomina funciones exponencialmente ponderadas (por ejemplo, ewma., Que calcula el promedio ponderado que se mueve exponencialmente). El hecho de que este segundo grupo no esté incluido en la primera (funciones de ventana móvil) es quizás porque las transformadas ponderadas exponencialmente no se basan en una ventana de longitud fija. Nuestro primer paso es trazar un gráfico que muestra los promedios de dos matrices. Let8217s crear dos matrices xey, y trazarlos. X será de 1 a 10. Y y tendrá esos mismos elementos en un orden aleatorio. Esto nos ayudará a verificar que efectivamente nuestra media es correcta. Let8217s aleatorizar el orden de nuestros elementos en y una vez más y trazar de nuevo: Con respecto a y let8217s ver cómo se comporta el medio móvil: En el siguiente tutorial vamos a trazar las medias móviles. Share this: Like this: Navegación de artículos relacionados Deja un comentario Cancelar respuesta d bloggers así: Los ejemplos siguientes producen una media móvil de los valores WINDOW anteriores. Truncan los primeros valores (WINDOW -1) ya que no podemos encontrar el promedio antes de ellos. (El comportamiento predeterminado para la convolución es asumir que los valores antes del inicio de nuestra secuencia son 0). (Más formalmente, construimos la secuencia y para la secuencia x donde yi (xi x (i1) 8230. x (in)) / n) Esto hace uso de la función de convolución numpy8217s. Esta es una operación de media móvil de propósito general. Cambiar las ponderaciones hace que algunos valores más importantes compensen apropiadamente le permite ver el promedio como alrededor del punto en vez de antes del punto. En lugar de truncar los valores podemos fijar los valores iniciales en su lugar, como se ilustra en este ejemplo: Como este: Navegación de artículos relacionados Deja un comentario Cancelar respuesta Gracias por la punta, me pareció útil Tienes un ligero error en tu ejemplo de valor inicial fijo : 8220extendeddata8221 debe ser el que se convolve, no 8220data8221. Gracias por notar que I8217ve enmendó el ejemplo. Un buen consejo, gracias. Sabía que tenía que haber una forma optimizada para calcular los promedios de rodadura. Desde los documentos (docs. scipy. org/doc/numpy/reference/generated/numpy. convolve. html), parece que su receta podría ser aún más concisa usando la palabra clave mode8221valid8221 en lugar de cortar: gtgtgt WINDOW 10 gtgtgt data 1 , 2,3,4,5,5,5,5,5,5,5,5,5,5,5 gtgtgt ponderaciones numpy. repeat (1.0, WINDOW) / WINDOW gtgtgt numpy. convolve (datos, ponderaciones) WINDOW (4. 4.4, 4.7, 4.9, 5. 5.) gtgtgt numpy. convolve (datos, ponderaciones, 8216valid8217) matriz (4. 4.4, 4.7, 4.9, 5. 5.)

No comments:

Post a Comment