Tuesday 4 July 2017

Moving Average Haskell


Média móvel Este exemplo ensina como calcular a média móvel de uma série temporal no Excel. Um avearge móvel é usado para suavizar irregularidades (picos e vales) para reconhecer facilmente as tendências. 1. Primeiro, vamos dar uma olhada em nossas séries temporais. 2. Na guia Dados, clique em Análise de dados. Nota: não consigo encontrar o botão Análise de dados Clique aqui para carregar o complemento Analysis ToolPak. 3. Selecione Média móvel e clique em OK. 4. Clique na caixa Intervalo de entrada e selecione o intervalo B2: M2. 5. Clique na caixa Intervalo e digite 6. 6. Clique na caixa Gama de saída e selecione a célula B3. 8. Traçar um gráfico desses valores. Explicação: porque definimos o intervalo para 6, a média móvel é a média dos 5 pontos de dados anteriores e o ponto de dados atual. Como resultado, picos e vales são alisados. O gráfico mostra uma tendência crescente. O Excel não pode calcular a média móvel para os primeiros 5 pontos de dados porque não há suficientes pontos de dados anteriores. 9. Repita os passos 2 a 8 para o intervalo 2 e o intervalo 4. Conclusão: quanto maior o intervalo, mais os picos e os vales são alisados. Quanto menor o intervalo, mais próximas as médias móveis são para os pontos de dados reais. Estou trabalhando em aprender 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 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, já que a função equivalente leva uma fração de segundo em Python. Existe alguma maneira que eu poderia tornar meu código mais eficiente perguntado 27 de dezembro 16 à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 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 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 é o 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) . Ah, também usa 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 fim da cauda de uma lista custa tanto como escanear a parte estava ignorando, e não estavam copiando nada. (Se o tamanho do Windows fosse geralmente bastante grande, poderíamos calcular os dados restantes, juntamente com a contagem da soma inicializada. De uma só 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 as médias para a posição tendenciosa (largura da janela para a direita), centeredSlidingAverage calcula 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. A Altitude de alcance centrada leva aproximadamente o mesmo tempo. Respondido 27 de dezembro às 22:25 Sua resposta 2017 Stack Exchange, Inc

No comments:

Post a Comment