Estoy jugando en Python un poco de nuevo, y he encontrado un libro limpio con ejemplos. Uno de los ejemplos es trazar algunos datos. Tengo un archivo. txt con dos columnas y tengo los datos. Yo trazo los datos muy bien, pero en el ejercicio dice: Modifique su programa más para calcular y trazar el promedio de los datos, definido por: donde r5 en este caso (y el yk es la segunda columna en el archivo de datos) . Haga que el programa dibuje tanto los datos originales como el promedio en el mismo gráfico. Hasta ahora tengo esto: ¿Cómo puedo calcular la suma en Mathematica es simple desde su manipulación simbólica (Sumi, por ejemplo), sino cómo calcular la suma en python que toma cada diez puntos en los datos y los promedios, y lo hace Hasta el final de los puntos que miraba el libro, pero no encontró nada que podría explicar esto: heltonbikers código hizo el truco: D Muchas gracias :) Hay un problema con la respuesta aceptada. Creo que necesitamos usar válido en lugar de lo mismo aquí - devolver numpy. convolve (intervalo, ventana, igual). Como ejemplo, pruebe el MA de este conjunto de datos 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - el resultado Debe ser 4.2.5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6,4.6,7.0,6.8. Pero tener lo mismo nos da una salida incorrecta de 2.6.3.0,4.2,5.4,6.0,5.0,5.0,5.2,5.4,4.4,5.4,5.6,5.6, 4.6,7.0,6.8,6.2,4.8 Código oxidado para probar esto -: Pruebe esto con amplificador válido mismo y ver si la matemática tiene sentido. Respondió Oct 29 14 at 4:27 Haven39t probado esto, pero I39ll mirar en él, It39s sido un tiempo desde I39ve codificado en Python. Ndash dingod Oct 29 14 at 7:07 dingod Por qué don39t que probar rápidamente con el código oxidado (y el conjunto de datos de muestra (como una simple lista), me publicó. Para algunas personas perezosas (como yo había sido al principio) - su máscara fuera el hecho de que el promedio móvil es incorrecto. Probablemente debería considerar la edición de su respuesta original. He intentado ayer y la doble comprobación me salvó la cara de mirar mal en la presentación de informes a nivel Cxo. Todo lo que tiene que hacer, es tratar Su mismo promedio móvil una vez con quotvalidquot y otra vez con quotsamequot - y una vez que esté convencido me dan un poco de amor (aka-up-vote) ndash ekta 29 de octubre 14 a las 7: 16Lets dicen que tengo una lista: Quiero crear una función Que calcula el promedio móvil de n días. Así que si n es 5, quiero que mi código para calcular el primer 1-5, añadir y encontrar el promedio, que sería de 3,0, a continuación, pasar a 2-6, calcular el Promedio, que sería 4,0, luego 3-7, 4-8, 5-9, 6-10.No quiero calcular los primeros n-1 días, por lo que a partir del día n, itll contar los días anteriores. Esto parece imprimir lo que quiero: Sin embargo, no sé cómo calcular los números dentro de esas listas. Mientras me gusta la respuesta de Martijns sobre esto, como george, me preguntaba si esto no sería más rápido usando una suma corriente en lugar de aplicar la suma () una y otra vez en la mayoría de los mismos números . También es interesante la idea de tener valores None por defecto durante la fase de rampa ascendente. De hecho, puede haber un montón de escenarios diferentes se podría concebir para los promedios móviles. Vamos a dividir el cálculo de promedios en tres fases: Ramp Up: Iniciando las iteraciones donde la iteración actual cuenta el tamaño de la ventana lt Progreso constante: Tenemos exactamente el número de tamaño de la ventana de elementos disponibles para calcular un promedio normal: sum (xiterationcounter-windowsize: iterationcounter) Windowsize Ramp Down: Al final de los datos de entrada, podríamos devolver otro número de Windowsize - 1. Tamaños de ventana arbitraria 1 Parámetros para activar / desactivar la producción de valores durante las fases de las funciones de Ramp Up / Down Callback para aquellas fases para controlar cómo se producen los valores. Esto puede ser utilizado para proporcionar constantemente un valor predeterminado (por ejemplo, Ninguno) o para proporcionar promedios parciales Parece ser un poco más rápido que la versión de Martijns - que es mucho más elegante, sin embargo. Heres el código de prueba: La pregunta original ahora puede ser resuelto con esta llamada de la función: contestó 18 de febrero 18 en 18:15 Utilice las funciones de la suma y del mapa. La función de mapa en Python 3 es básicamente una versión perezosa de esto: Im seguro de que puede adivinar lo que hace la función de suma. Respondió Feb 14 13 at 21:07 Una aproximación que evita recomputar sumas intermedias .. hacer que se ejecute (int (v)). entonces. (Runumlistk - runsumlistk-5) / 5) si usted hormiga para llevar alrededor de los números de una cadena .. Alt sin la global: asegúrese de hacer matemáticas flotantes, incluso si los valores de entrada son enteros respondió Feb 14 13 at 22:04 Indeed a El algoritmo de la suma de ejecución es más rápido. He publicado una respuesta que demuestra su punto. No hay necesidad de una variable global aquí. Ndash cfi Feb 18 13 at 18:16 right you are, yo estaba tratando demasiado difícil aviod un bucle explícito. Ndash agentp Feb 19 13 at 18:37 Su respuesta 2016 Stack Exchange, IncIm en el proceso de creación de un algoritmo de comercio de divisas y quería probar mi oportunidad de calcular EMA (Exponential Moving Averages). Mis resultados parecen ser correctos (en comparación con los cálculos que hice a mano), así que creo que el método siguiente funciona, pero sólo quería obtener un conjunto extra de ojos para que asegúrese de que no estoy perdiendo nada. Tenga en cuenta que esto acaba de devolver el EMA para el último precio, no devuelve una matriz de EMAs como que no es lo que necesito para mi aplicación. La recursión es una buena herramienta para el trabajo correcto, pero aquí se utiliza para realizar bucle simple. Como tal el código. Es más difícil de leer y razonar. Es más lento porque gran parte del código en ema sólo necesita ejecutarse una vez. Fallará con el valor suficientemente grande de la ventana debido a la pila de llamadas Pythons desbordante. Por favor, documente al menos los parámetros de cada función, por ejemplo. Esa ventana es la longitud de la ventana, y esa posición cuenta hacia atrás desde el final de los datos. (De hecho, las cosas serían más claras si la posición fuera un índice normal hacia adelante en los datos) Aumentar una excepción cuando encuentre un parámetro tiene un valor no válido. Devolver Ninguno en su lugar sólo causará una excepción más confusa más tarde. De hecho, si intento Indicadores (). Ema (closeprices, 600) recibo recursión infinita porque sma devuelve None. Que hace que ema llama sma una y otra vez. El punto anterior también revela que si len (datos) lt ventana 2 no es la verificación de validez correcta. El 1 en data-window2 1: - window 1 no me parece correcto. Supongo que quieres data-window2: - window La declaración return previousema está en un lugar extraño porque en ese momento has calculado una nueva currentema. Este es el caso base de la recursión, y es costumbre manejar el caso base primero. Mi propuesta para ema: respondió Nov 26 14 at 18:56 Pretty shallow review: No necesitas escribir una clase para lo que estás haciendo (y te sugiero que eche un vistazo a este video). Tu clase no encapsula ningún dato y solo lo usas para tener tus funciones en una misma entidad. Supongo que las cosas más fáciles de entender si se va a definir classmethod para hacer obvio que usted no va a confiar en cualquier instancia en absoluto. Sin embargo, una opción aún mejor sería definir funciones en un módulo indicador. Respondió Nov 24 14 at 18:04 Gracias por las sugerencias que en realidad los tenía como métodos de clase y debatido ir y venir entre incluso el uso de una clase o simplemente la definición de funciones en un módulo indicador (que voy a hacer ahora). Ndash ChrisC Nov 25 14 at 19:12 Acaba de ver el video también, grandes cosas. Ndash ChrisC Nov 25 14 at 19:43 Su respuesta 2016 Stack Exchange, Inc
No comments:
Post a Comment