Saturday, 27 July 2019

Moving average haskell


Estou trabalhando na aprendizagem de Haskell, então tentei implementar uma função de média móvel. Aqui está o meu código: onde o usuário chama mática com um comprimento para cada média e a lista de valores (por exemplo, a média 4 1,2 ... 100). No entanto, quando eu executo o código na entrada de 4,4 mil milhões de mAverage. Eu entendo que leva 3,6 segundos em ghci (usando: set s) e usa um gigabyte de memória. Isso parece muito ineficiente para mim, pois a função equivalente leva uma fração de segundo no Python. Existe alguma maneira que eu poderia tornar meu código mais eficiente perguntou 27 de dezembro às 19:59 Uma maneira de fazer a janela deslizante é passar na primeira soma como um flutuador. Passar na lista original (para ser usado para subtrair a soma atual) e a lista original com k entradas caiu (para ser usado para adicionar a soma atual). Então, a próxima soma é a soma passada em menos o primeiro elemento da lista de subtração mais o primeiro elemento da lista de adição. Ndash Chai T. Rex 27 de dezembro 16 às 20:33 Se você quiser aprender algo novo, você pode dar uma olhada nesta solução agradável para o problema da Mudança de Média. Está escrito por um dos meus alunos, então eu não reivindico autoria. Eu realmente gosto porque é muito curto. O único problema aqui é a função média. Tais funções são conhecidas como ruins. Em vez disso, você pode usar belas dobras por Gabriel Gonzalez. E sim, esta função leva o tempo O (k) (onde k é tamanho da janela) para calcular a média da janela (acho melhor porque você pode enfrentar erros de ponto flutuante se você tentar adicionar apenas um novo elemento à janela e subtrair o último) . Oh, ele também usa a mônada do estado :) UPD: depois de uma revisão do código, notei que não é necessário usar dobras aqui para calcular a média. Você sabe que o comprimento sempre será n, então você pode simplesmente colocar a função média na cláusula where. Respondeu 27 de dezembro às 23:26 Heres uma solução para você. A idéia é escanear duas listas, uma onde começa a janela de média e outra onde ela termina. Conseguir um final da lista de uma lista custa tanto como escanear a parte falhando e não copiando nada. (Se o tamanho do Windows fosse geralmente bastante grande, poderíamos calcular o valor restante junto com a contagem da soma de inicialização. De uma vez.) Geramos uma lista de somas parciais conforme descrito no meu comentário e, em seguida, divida-as pela largura do Windows para obter as médias . Enquanto slidingAverage calcula médias para a posição tendenciosa (largura da janela para a direita), centeredSlidingAverage calcula as médias centradas, usando metade da largura da janela para a esquerda e para a direita. Quando eu tento o comprimento de slidingAverage 10 1..1000000. Demora menos de um segundo no meu MBP. Devido à preguiça. CentralizadoSlidingAverage leva aproximadamente o mesmo tempo. Respondido 27 de dezembro às 22:25 Sua resposta 2017 Stack Exchange, Inc Dado que estamos em um idioma sem arrays, eu suponho que você é iniciante de linguagem. De qualquer forma, informações adicionais devem ser editadas na questão propriamente dita, de modo que outros usuários não precisam escapar informações dos comentários. Não tenho tempo para dar uma resposta completa, mas isso deve ser viável com as caudas. Fechamento e um pouco de fadiga de fronteira. Ndash Zeta 6 de novembro 16 às 10:43 A média móvel pode ser calculada com uma máquina média, onde o estado interno é valores anteriores. Eu mostro uma média móvel em três exemplos de argumentos, você pode se mexer para e. Faça com que seja parametrizável em tamanho. A máquina Mealy é essencialmente um estado inicial e a entrada de estado para a nova função de saída de estado: vamos assumir que o estado inicial é todos os zeros e escreve uma função para a média móvel em 3. Agora obtemos todas as peças, vamos executar a máquina na entrada : Você pode soltar os primeiros valores produzidos, pois o estado interno da máquina está aquecendo. Para a máquina média móvel de tamanho arbitrário, você pode usar Data. Sequence. Como a sua estrutura de dados muito melhor quando você empurra para uma extremidade, enquanto pop de outra, então uma única lista vinculada. . Por que estou falando sobre a máquina Mealy Porque em algum momento provavelmente irá encontrar uma situação em que você precisa usar alguma biblioteca de streaming em Haskell: pipes. Condutas ou máquinas. Então, a abordagem da máquina Mealy será a única solução razoável. Além disso, você também pode fazer modelos autorregressivos. Trabalhos de filme A tendência da demanda de anúncios de trabalho citando Haskell como uma proporção de todos os trabalhos de TI com uma correspondência na categoria de Idiomas de programação. Tendência Salarial Haskell Este gráfico fornece a média móvel de 3 meses para os salários citados em trabalhos permanentes de TI citando Haskell no Reino Unido. Histograma Salarial Haskell Este gráfico fornece um histograma salarial para trabalhos informáticos citando Haskell nos 3 meses até 25 de janeiro de 2017 no Reino Unido. Haskell Top 26 Locais de trabalho A tabela abaixo analisa a demanda e fornece um guia para os salários médios citados em trabalhos de TI citando Haskell no Reino Unido nos 3 meses até 25 de janeiro de 2017. A coluna de Mudança de Rank fornece uma indicação da mudança de demanda Dentro de cada local com base no mesmo período de 3 meses do ano passado. Alteração de classificação no mesmo período correspondente ao ano passado Permanent IT Job Ads Salário médio nos últimos 3 meses

No comments:

Post a comment