Estoy utilizando una ventana móvil dinámica para calcular estadísticas simples en una serie ordenada en la fecha clave. Quiero ser capaz de establecer el límite al final de la ventana. Por ejemplo un timeseries con el promedio móvil mensual, el mensual se decide por un sin embargo la función de la serie del deedle utiliza siempre el comienzo como el límite. Por lo tanto, siempre crea producir una serie de datapuntos n de la primera instancia de datos para los próximos n puntos de datos (n se decide por la diversión anterior). Me gustaría tener una serie de datapuntos n de los datos nth y mirar hacia atrás en el pasado. También traté de utilizar Series. Rev primero para invertir la serie, pero deedle creo que la serie, aunque en una orden inversa ya no se ordena. Es lo que estoy buscando posible Si usted mira la lista de funciones de agregación en los documentos. Youll encontrar un agregado de funciones que es una generalización de todas las funciones de chunking amplificador de ventanas y también tiene un selector de teclas. Esto significa que usted puede hacer algo como esto: La función toma 3 parámetros, incluyendo selector de teclas y una función que obtiene el segmento de datos (que tiene la ventana junto con un indicador si está completo o incompleto - por ejemplo, al final de la ventana). Lamentablemente, esto no funciona bien aquí, ya que creará una serie con claves duplicadas (y las que no son compatibles con Deedle). Las ventanas al final del trozo terminarán con la misma fecha y así obtendrás claves duplicadas (en realidad se ejecuta, pero no puedes hacer mucho con la serie). Una solución fea es recordar los últimos trozos y devolver los valores perdidos una vez que el final empieza repitiendo: Im todavía trabajando en groking la cosa F - tratando de trabajar en la forma de pensar en F en lugar de sólo la traducción de otros idiomas que conozco. Ive ha estado pensando recientemente en los casos donde usted no tiene un 1: 1 mapa entre antes y después. Casos en los que se desplaza List. map. Un ejemplo de esto son los promedios móviles, donde típicamente tendrás los resultados len-n1 para una lista de longitud len al promediar sobre n items. Para los gurús por ahí, ¿es esto una buena manera de hacerlo (utilizando la cola pinchada de Jomo Fisher) (Tal vez una mejor manera sería implementar un MovingAverageQueue por la herencia de Fifo) preguntó 17 de noviembre 08 a las 11:12 tuve que declarar Lo que permite MovingAverage n (s seqltfloatgt) con el fin de poner esto en un módulo de utilidad, lejos del sitio de la llamada, para aplacar el sistema de tipo. Por lo que puedo decir, esto sólo funciona con flotadores, debido a una limitación de Array. average. MSDN afirma que puedo reemplazar eso con Array. averageBy para usar esto en una secuencia int, pero que da un error diferente. Brian, ¿puedes reformular esta respuesta para que funcione en contextos genéricos, de modo que funcione con tipo seq-of-any-arithmetic, sin la inferencia de tipos? Ndash Warren Young Jun 27 13 at 19:04 Debo señalar que mi necesidad de Esta función de media móvil es obtener una ventana corta (30ish) sobre una secuencia de enteros que son casi todos en los millones, por lo que don39t necesidad de punto flotante. Incluso un solo dígito a la derecha del punto decimal no es de uso práctico en mi aplicación. La conversión de mis números enteros a FP y el resultado de nuevo a int apenas para aplacar la biblioteca estándar de F doesn39t apelación. Ndash Warren Young Jun 27 13 a las 19:30 Si te importa el rendimiento, entonces puedes calcular una media móvil eficientemente usando algo como esto (suponiendo que estuvieran calculando una media móvil en una ventana de 3 días) La parte difícil de esto es la celebración En su total de ejecución anterior y número de N-ventana. Vine para arriba con el código siguiente: Esta versión no está tan guapa como el código de Haskell, pero debe evitar problemas del funcionamiento asociados con recomputing su ventana en cada funcionamiento. Mantiene un total de ejecución y mantiene los números utilizados anteriormente en una cola, por lo que debe ser muy rápido. Sólo por diversión, escribí un punto de referencia simple: Si te preocupas por el rendimiento y como el código elegante, a continuación, intente Usar FSUnit podemos probarlo El truco del algoritmo es la primera suma de los primeros n números y luego mantener un total de correr mediante la adición de la cabeza De la ventana y restando la cola de la ventana. La ventana deslizante se logra haciendo un auto zip en la secuencia, pero con el segundo argumento a zip avanzado por el tamaño de la ventana. Al final de la tubería sólo dividimos el total de ejecución por el tamaño de la ventana. El escaneado de notas es igual que el doblez, pero produce cada versión del estado en una secuencia. Una solución aún más elegante, aunque posiblemente con éxito de rendimiento es hacer la observación de que si ponemos cero la secuencia no necesitamos calcular la suma inicial. Podría haber un impacto en el rendimiento debido a la segunda indirección relacionada con el envoltorio de las dos secuencias, pero quizás no es significativo dependiendo del tamaño de la ventana que se conteste. Ago 31 12 a las 8: 06Tamales Math. NET Numerics Versión 3 Math. NET Numerics Está bien en su camino hacia la próxima versión importante, v3.0. Una primera vista previa alfa ya ha sido empujado a la galería NuGet, a pesar de que todavía hay mucho que hacer. Si te gustaría entender un poco mejor donde estamos actualmente, a dónde se dirigían, y por qué, a continuación, siga leyendo. Por qué un nuevo lanzamiento importante Aplicamos los principios de la versión semántica. Lo que significa que no se supone que romper cualquier parte de la superficie pública de la biblioteca, que es casi todo en nuestro caso, durante los pequeños lanzamientos (con el formato de la versión de 3 partes major. minor. patch). Esto se asegura de que usted puede actualizar fácilmente dentro de las emisiones de menor importancia sin pensamientos segundos o romper cualquiera de su código. Sin embargo, a veces hay realmente una buena razón para cambiar el diseño, porque es una forma complicada de usar, inconsistente, conduce a un mal desempeño o simplemente no fue muy bien pensado. O simplemente aprendimos a hacerlo de una manera mucho mejor. Es posible que haya notado que algunos miembros han sido declarados obsoletos en los últimos lanzamientos secundarios, con sugerencias de cómo hacerlo en su lugar, aunque la implementación antigua se mantuvo intacta. Con el tiempo todo ese viejo código se convirtió en un dolor para mantener, y el uso de la biblioteca era mucho más complicado de lo necesario. Así que decidí su tiempo para finalmente arreglar la mayoría de estos problemas y limpiar. Hacemos un poco de queso en esta versión. Su código se romperá en algunas ocasiones. Pero en todos los casos un arreglo debe ser fácil si no trivial. Además, una vez allí volveremos a estar obligados por la versión semántica para mantener la biblioteca estable sobre todas las futuras versiones menores y por lo tanto, probablemente en los próximos años. Además, podemos seguir proporcionando parches para la antigua sucursal v2 si es necesario por un tiempo. Sin embargo, recomiendo encarecidamente actualizar a v3 una vez disponible. La regeneración es agradable Una primera inspección previo (v3.0.0-alfa1) se ha publicado ya a NuGet y planeo hacer por lo menos dos más lanzamientos de la inspección previo antes de que alcancemos la primera versión v3.0. Por favor, eche un vistazo y dar comentarios - ahora es una posibilidad única para romper los cambios. Visión general sobre lo que se ha hecho hasta ahora Simplificación de espacio de nombres. Diseño más funcional donde sea apropiado. Asegúrese de que todo funcione bien y se sienta nativo tanto en C como en F. Utilice nombres cortos comunes si son bien conocidos en lugar de nombres muy largos (trigonometría). Álgebra Lineal: Usando los tipos genéricos es la forma recomendada ahora asegúrese de que funciona bien. Las clases de IO para la serialización de matriz / vector se convierten en paquetes separados. Refactorización importante de los solucionadores iterativos. Llena algunas piezas perdidas, varias simplificaciones, muchos otros cambios. Distribuciones: Limpieza importante. Exposición directa de funciones de distribución (pdf, cdf, etc). Estimación de parámetros. Nuevas funciones de distancia Descripción general de lo que se planea hacer Los solucionadores iterativos necesitan más trabajo. También me gustaría diseñarlos de tal manera que se puedan iterar manualmente, de una manera sencilla. Las transformaciones integrales (FFT, etc.) necesitan refactorización importante. Respaldado por un proveedor nativo si es posible. Considere la posibilidad de devolver el filtrado (FIR, IIR, promedio móvil, etc.) El ajuste actual de la curva basada en la QR-descomposición es ineficiente para grandes conjuntos de datos, pero la fijación en realidad no es muy complicado. Investigue y corrija una inconsistencia en la clase Precision. Drop redundant null-checks Detalles sobre lo que es nuevo en la versión 3 hasta ahora Dropping. Algorithms Espacios de nombres ¿Alguna vez tuvo que abrir 10 espacios de nombres Math. NET Numerics diferentes para obtener todo lo que necesita Esto debería obtener algo mejor en v3, como las fachadas estáticas como Integrar . Interpolar. Fit o FindRoots para casos simples se han movido directamente al espacio de nombres raíz MathNet. Numerics y todos los espacios de nombres de algoritmos (para usos avanzados) de la forma MathNet. Numerics. X.Algorithms son ahora simplemente MathNet. Numerics. X. Interpolación Además de los espacios de nombres simplificados, se ha simplificado la última sobrecarga diferenciada que devuelve todo el valor interpolado y la derivada primera y segunda en algún punto x: en lugar de dos parámetros fuera en un orden inesperado, ahora devuelve una tupla con un orden razonable . Integración El diseño de la transformación doble exponencial fue bastante extraño. Se ha simplificado a una clase estática y es mucho más simple de usar explícitamente. Distribuciones de probabilidad Aunque siempre fue posible asignar una fuente aleatoria personalizada (RNG) a una distribución para el muestreo de números aleatorios, fue algo complicado y requirió dos pasos. Ahora todos los constructores de distribución tienen una sobrecarga que acepta una fuente aleatoria personalizada directamente en la construcción, en un solo paso. Algunas distribuciones ahora soportan la estimación de parámetros de máxima verosimilitud y la mayoría de las distribuciones implementan una función de distribución acumulativa inversa. Funciones de distribución como PDF. CDF y InvCDF ahora se exponen directamente como funciones estáticas. La documentación en línea y la nomenclatura de parámetros se han mejorado significativamente. ChiSquare se convirtió en ChiSquared. Y la interfaz de IDistribución se convirtió en IUnivariateDistribution. Un muestreo aleatorio más fácil de componer en F con un nuevo módulo de muestra. Nuevas funciones de distancia Rutinas estándar para evaluar las distancias euclidianas, Manhattan y Chebychev entre arrays o vectores, también para la Suma de Diferencia Absoluta (SAD), el Error Medio Absoluto (MAE), la Suma de la Diferencia Cuadrada (SSD) y la Media-Squared Métricas de error (MSE). Hamming distancia. Aprovechar a los proveedores cuando corresponda. Menos comprobaciones nulas y ArgumentNullExceptions Posiblemente como un efecto secundario de mi exposición a la programación funcional durante el último año, ya no siga los argumentos por qué en C cada rutina debe comprobar explícitamente todos los argumentos para null. Ive ya cayó algunas de estas comprobaciones, pero todavía hay más de 2000 lugares donde Math. NET Numerics lanza un ArgumentNullException. La mayoría de estos probablemente se habrán ido. Hay un caso en el que tiene sentido mantenerlos aunque: cuando una rutina acepta un argumento pero no lo usa de inmediato (y por lo tanto no causa una NullReferenceException inmediata), una referencia nula que se escondía podría ser difícil de depurar, tan bien Guarda el cheque Pero estos casos son bastante raros dada la naturaleza de la biblioteca. Biblioteca IO La biblioteca IO que solía ser distribuida como parte del paquete principal ahora es un conjunto de paquetes NuGet independientes, p. MathNet. Numerics. Data. Text. Y vive en un repositorio separado. Favorecimiento de los tipos de álgebra lineal genérica Dado que el espacio de nombres genérico se requiere todo el tiempo de todos modos y la ruta recomendada feliz ahora es utilizar siempre los tipos genéricos, todo desde el espacio de nombres. Generic se ha movido un espacio de nombres hacia arriba. De ahora en adelante sólo necesitará abrir dos espacios de nombres cuando se trabaja con álgebra lineal, incluso si se necesitan factorizaciones. Por ejemplo, al usar el tipo doble, abra MathNet. Numerics. LinearAlgebra y MathNet. Numerics. LinearAlgebra. Double. Puesto que el mecanografiar es más fuerte en F, todas las funciones del init / create en el módulo de F ahora vuelven directamente los tipos genéricos así que usted no tiene que upcast manualmente todo el tiempo. La mayoría de las rutinas se han generalizado para trabajar en tipos genéricos. Para los casos en los que se desea implementar algoritmos genéricos, pero también es necesario crear nuevas matrices o vectores densos o escasos, se ha agregado un nuevo generador genérico. Sin embargo, esto raramente debería ser necesario en el código de usuario. Falta de rutinas de matriz escalar Se han agregado algunas rutinas de matriz escalar faltantes como agregar o restar un escalar a una matriz o dividir un escalar por una matriz, respaldadas por proveedores cuando sea posible. Theres ahora también una rutina del módulo. Los operadores punto inflexión en punto donde apoyado (F) Weve añadido punto-sabio .. / y. Operadores a matrices y vectores en la biblioteca central. Esto no es compatible en todos los idiomas. Net todavía, pero funciona bien en F, aunque sin currying apoyo. Por supuesto en los otros idiomas puedes seguir usando los métodos normales como antes. Factorización y Solteros Iterativos Anteriormente, la factorización de la matriz sólo era accesible por métodos de extensión o creación explícita, lo que no funcionó muy bien al utilizar tipos genéricos. El tipo de matriz genérico ahora proporciona métodos para crearlos directamente. Como tal, las implementaciones reales han sido internalizadas ya que ya no hay necesidad de acceso directo. La factorización QR es ahora delgada por defecto, y las factorizaciones ya no clonan sus resultados sin razón práctica. El diseño de solver iterativo ha sido significativamente simplificado y ahora es genérico y compartido donde sea posible y acepta tipos genéricos en todas partes. Los espacios de nombres son ahora mucho más plana, ya que la estructura muy detallada no agrega ningún valor, pero significaba que había que abrir una docena de espacios de nombres. Diversas mejoras de álgebra lineal Los vectores ahora tienen una rutina ConjugateDotProduct además de DotProduct. Los vectores ahora proporcionan explícitamente las normas L1, L2 y de infinito adecuadas. Matrices / Vectores ahora tienen enumeradores consistentes, con una variante que salta ceros (útil si es escaso). Las rutinas de creación de Matrix / Vector han sido simplificadas y generalmente ya no requieren dimensiones explícitas. Nuevas variantes para crear matrices diagonales, o tal donde todos los campos tienen el mismo valor. Matrices / Vectores exponen si el almacenamiento es denso con una nueva propiedad IsDense. Los proveedores se han trasladado a un espacio de nombres Proveedores y son totalmente genéricos de nuevo. Varios Complejos más robustos Asin / Acos para números reales grandes. Funciones Trig: nombres cortos comunes en lugar de nombres muy largos. Complejo: nombres cortos comunes para Exp, Ln, Log10, Log. Estadísticas: nuevo método de paso simple de MeanVariance (como se utiliza a menudo juntos). Compartir esta publicacion
No comments:
Post a Comment