Tuesday 19 December 2017

Plot moving average python


Eu sei que esta é uma velha questão, mas aqui está uma solução que doesn t usar qualquer estrutura de dados extra ou bibliotecas É linear no número de elementos da lista de entrada e não consigo pensar em qualquer outra forma de torná-lo mais eficiente, Ninguém sabe de uma maneira melhor para alocar o resultado, por favor me avise know. NOTE isso seria muito mais rápido usando uma matriz numpy em vez de uma lista, mas eu queria eliminar todas as dependências Também seria possível melhorar o desempenho por multi-threaded Execução. A função assume que a lista de entrada é uma dimensão, por isso tenha cuidado. UPD soluções mais eficientes foram propostas por Alleo e jasaarim. You pode usar para that. The modo argumento especifica como lidar com as bordas eu escolhi o modo válido aqui Porque eu acho que é como a maioria das pessoas esperam correr média para o trabalho, mas você pode ter outras prioridades Aqui está um gráfico que ilustra a diferença entre os modos. respondeu Mar 24 14 at 22 01.I como esta solução, porque é limpa uma linha E r Elatively eficiente trabalho feito dentro numpy Mas Alleo s Solução eficiente usando tem melhor complexidade Ulrich Stern Sep 25 15 em 0 31. Você pode calcular uma média correndo com. Felizmente, numpy inclui uma função convolve que podemos usar para acelerar as coisas O meio de corrida É equivalente a convolver x com um vetor que é N longo, com todos os membros iguais a 1 N A implementação numpy de convolve inclui o transiente inicial, então você tem que remover os primeiros pontos N-1. Na minha máquina, a versão rápida é 20-30 vezes mais rápido, dependendo do comprimento do vetor de entrada e tamanho da janela de média. Note que convolve não incluem um mesmo modo que parece que ele deve abordar a questão transitória de partida, mas ele divide-lo entre o início eo fim. Ele remove o transiente do final, eo início não tem um bem, eu acho que é uma questão de prioridades, eu não preciso do mesmo número de resultados à custa de obter uma inclinação para zero que não existe nos dados BTW, Aqui é um comando para mostrar a diferença entre os modos de modos cheio, mesmo, convênio válido parcela 200,, uns 50, 50, modo m para m nos modos eixo -10, 251, - 1, 1 1 modos de legenda, Center com pyplot e numpy importados lapis Mar 24 14 em 13 56.pandas é mais adequado para isso do que NumPy ou SciPy Sua função rollingmean faz o trabalho convenientemente Ele também retorna um array NumPy quando a entrada é um array. It é difícil de bater rollingmean Em desempenho com qualquer implementação personalizada Python puro Aqui está um exemplo de desempenho contra duas das soluções propostas. Há também opções agradáveis ​​sobre como lidar com os valores de borda. Eu estou sempre irritado pela função de processamento de sinal que retornam sinais de saída de forma diferente Que os sinais de entrada quando ambas as entradas e saídas são da mesma natureza, por exemplo, ambos os sinais temporais Quebra a correspondência com a variável independente relacionada, por exemplo, tempo, freqüência fazendo plotagem ou comparação não uma questão directa de qualquer maneira, se você shar E o sentimento, você pode querer mudar as últimas linhas da função proposta como o mesmo retorno xml feed Um pouco tarde para a festa, mas eu fiz o meu próprio Pouca função que não envolve em torno das extremidades ou almofadas com zeros que são então usados ​​para encontrar a média, bem como um tratamento adicional é, que também re-amostras do sinal em pontos linearmente espaçados Personalizar o código à vontade para obter outras funcionalidades . O método é uma multiplicação simples da matriz com um kernel normalizado de Gauss. Uso simples em um sinal sinusoidal com o ruído distribuído normal adicionado. Esta pergunta é agora mesmo mais velha do que quando NeXuS escreveu sobre ela o mês passado, MAS eu gosto de como seu código trata No entanto, por ser uma média móvel simples, seus resultados ficam atrás dos dados que eles aplicam. Eu pensei que lidar com casos de borda de uma forma mais satisfatória do que NumPy s modos válidos mesmo e completo poderia ser alcançado através da aplicação de uma abordagem semelhante Para uma convolução Ed. Minha contribuição usa uma média de execução central para alinhar seus resultados com seus dados. Quando há dois poucos pontos disponíveis para a janela de tamanho completo a ser usada, as médias de execução são calculadas a partir de janelas sucessivamente menores nas bordas da matriz. Na verdade, A partir de janelas sucessivamente maiores, mas isso é uma implementação detail. It s relativamente lento, porque usa convolve e poderia provavelmente ser spruced até muito por um verdadeiro Pythonista, no entanto, acredito que a idéia stands. answered 02 de janeiro em 0 28. É bom, mas lento quando a largura da janela cresce grande Algumas respostas fornecem algoritmos mais eficientes com mas parecem incapazes de lidar com valores de borda Eu mesmo tenho implementado um algoritmo que pode lidar com este problema bem, se este problema é declarado como. Input parâmetro mergenum pode ser pensado Como 2 windowwidth 1.Eu sei que este código é um pouco ilegível se u encontrá-lo útil e deseja algumas expansões, por favor me avise e eu vou atualizar esta resposta Desde escrevendo uma explicação pode custar m E muito tempo, espero que eu faço isso apenas quando alguém precisa dele Por favor, perdoe-me por minha preguiça. Se apenas u estão interessados ​​em sua versão original. É ainda mais ilegível a primeira solução se livrar do problema de borda por zeros de preenchimento em torno do Array, mas a segunda solução postada aqui manipula-lo de uma maneira dura e direta. Em minha última frase eu estava tentando indicar por que ele ajuda a flutuação de erro de ponto Se dois valores são aproximadamente a mesma ordem de grandeza, então adicioná-los perde menos precisão do que Se você adicionou um número muito grande a um muito pequeno O código combina valores adjacentes de uma forma que mesmo somas intermediárias devem sempre ser razoavelmente próximos em magnitude, para minimizar o erro de ponto flutuante Nada é à prova de tolo, mas este método salvou um casal muito Mal implementado projetos em produção Mayur Patel 15 de dezembro de 17 em 17 22. Alleo Em vez de fazer uma adição por valor, você vai estar fazendo dois A prova é o mesmo que o bit-flipping problema No entanto, o ponto desta resposta Não é necessariamente desempenho, mas precisão uso de memória para a média de valores de 64 bits não excederia 64 elementos no cache, por isso é amigável no uso de memória Mayur Patel 29 de dezembro de 17 04. Eu estou jogando em Python um pouco mais , E eu encontrei um livro limpo com exemplos Um dos exemplos é traçar alguns dados Eu tenho um arquivo com duas colunas e eu tenho os dados que eu tracei os dados muito bem, mas no exercício que diz Modificar seu programa mais para calcular e Traçar a média de execução dos dados, definida por. Onde r 5 neste caso eo yk é a segunda coluna no arquivo de dados Ter o programa trama tanto os dados originais ea média de corrida no mesmo gráfico. Até agora eu tenho isso Assim como eu calculo a soma Em Mathematica é simples desde que é manipulação simbólica Soma i, por exemplo, mas como calcular a soma em python que faz exame de cada dez pontos nos dados e os meios ele, e faz assim até o fim de Eu olhei o livro, mas não encontrei nada que pudesse explicar Is. heltonbiker s código fez o truque D. Thank você muito much. There é um problema com a resposta aceite eu acho que precisamos usar válido em vez de mesmo aqui - retornar janela, same. As um exemplo de experimentar o MA destes dados - set 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - o resultado deve 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 mas tendo o mesmo nos dá uma saída 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 em bruto para tentar Este out. Try isso com válido mesmo e ver se a matemática faz sentido. resposta 29 de outubro 14 às 4 27.Haven t tentou isso, mas eu vou olhar para ele, Tem sido um tempo desde que eu codifiquei em Python dingod Oct 29 14 at 7 07. dingod Por que você não tentar rapidamente isso com o código enferrujado eo exemplo de conjunto de dados como uma simples lista, eu postei Para algumas pessoas preguiçosas como eu tinha sido no início - suas máscaras para fora o fato de que a mudança Média é que você deve considerar a edição de sua resposta original Eu tentei isso ontem e verificando duplo salvo Me cara de olhar ruim em relatar ao nível Cxo Tudo que você precisa fazer, é tentar a sua mesma média móvel uma vez com tempo válido e outro com o mesmo - e uma vez que você está convencido me dar algum amor aka-up-vote ekta Oct 29 14 Em 7 16. Nós introduzimos anteriormente como criar médias móveis usando python Este tutorial será uma continuação deste tópico Uma média móvel no contexto de estatísticas, também chamado de média móvel rodando, é um tipo de resposta de impulso finito. Tutorial nós traçamos os valores dos arrays x e y. Let s plot x contra a média móvel de y que vamos chamar yMA. Primeiramente, vamos s equalizar o comprimento de ambos os arrays. And para mostrar isso em context. The gráfico resultante . Para ajudar a entender isso, vamos plotar dois relacionamentos diferentes x vs y e x vs MAy. A média móvel aqui é o enredo verde que começa em 3.Na continuação deste tutorial, vamos aprender a calcular médias móveis em grande Conjuntos de dados.

No comments:

Post a Comment