Monday 13 November 2017

Numpy Convolve Exponential Moving Average


Hmmm, parece que este fácil de implementar a função é realmente muito fácil de errar e tem promovido uma boa discussão sobre a eficiência da memória Estou feliz por ter bloat se isso significa saber que algo foi feito certo Richard Sep 20 14 às 19 23.NumPy A falta de uma determinada função específica do domínio é talvez devido à disciplina da equipe de núcleo e fidelidade à diretriz principal de NumPy fornecer um tipo de matriz N-dimensional, bem como funções para criar e indexar esses arrays Como muitos objetivos fundamentais, este Não é pequena e NumPy faz isso brilhantemente. A SciPy muito maior contém uma coleção muito maior de bibliotecas específicas de domínio chamadas subpacotes por devs da SciPy - por exemplo, otimização de otimização numérica, sinal de processamento de sinal e integração integral de cálculo. Que a função que você está depois está em pelo menos um dos subpacotes SciPy talvez no entanto, eu iria olhar primeiro na coleção SciPy scikits identificar os scikit relevantes e procurar A função de interesse lá. Scikits são desenvolvidos independentemente pacotes baseados em NumPy SciPy e direcionados a uma disciplina técnica particular, por exemplo, scikits-image scikits-learn etc Vários destes foram, em particular, o impressionante OpenOpt para otimização numérica foram altamente considerados, projetos maduros longo Antes de escolher para residir sob a rubrica de Scikits relativamente novo A página inicial de Scikits gostava de listas acima de cerca de 30 scikits tais embora pelo menos vários deles não estão mais em desenvolvimento ativo. Seguindo este conselho levaria você a scikits-timeseries no entanto, esse pacote não é Mais tempo em desenvolvimento ativo Em vigor, Pandas tornou-se, AFAIK, o NumPy de facto série library. Pandas série tem várias funções que podem ser usadas para calcular uma média móvel a mais simples destes é provavelmente rollingmean que você usa como so. Now , Basta chamar a função rollingmean passando no objeto Series e um tamanho de janela que no meu exemplo abaixo é 10 days. verify que w Por exemplo, os valores comparados 10-15 na série original versus a nova série suavizada com média de rolamento. A função rollingmean, juntamente com cerca de uma dúzia de outras funções são agrupadas informalmente na documentação Pandas sob a rubrica move janela funciona um segundo , Grupo relacionado de funções em Pandas é referido como funções exponencialmente ponderadas eg ewma que calcula exponencialmente movimento de média ponderada O fato de que este segundo grupo não está incluído nas primeiras funções janela em movimento é talvez porque as transformações ponderadas exponencial don t confiar Uma janela de comprimento fixo. contestada Jan 14 13 at 6 38.indicadores técnicos 0 0 16.Este módulo fornece alguns indicadores técnicos para a análise de estoque. Este módulo fornece alguns indicadores técnicos para a análise de ações. Quando eu posso eu vou adicionar mais. Se alguém quiser Para contribuir com novas sugestões de código ou correções, sinta-se livre. Índice de Força Relativa RSI, ROC, MA envelopes Simple SMA Moving Average, Movi ponderada Ng Média WMA, média móvel exponencial EMA Bandas Bollinger BB, Bollinger Bandwidth, B. It requer numpy. Este módulo foi feito e testado em Windows com Python 2 7 3 e numpy 1 6 1.Eu sei que esta é uma velha questão, mas aqui É uma solução que não usa 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 maneira de torná-lo mais eficiente, na verdade, se alguém sabe de uma maneira melhor para alocar o resultado , Por favor, deixe-me 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 é Um dimensional, por isso tenha cuidado. Você pode calcular uma média correndo com. Felizmente, numpy inclui uma função de convolução que podemos usar para acelerar as coisas A média de execução é equivalente a convolver x com um vetor que é N longo, com todos os membros iguais A 1 N Th E numpy implementação 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. It remove o transitório do final, eo início não tem um bem, eu acho que ele É uma questão de prioridades, eu não preciso do mesmo número de resultados à custa de obter uma inclinação em direção a zero que isn t lá no BTW dados, aqui está um comando para mostrar a diferença entre os modos de modos cheio, mesma parcela, válido Convolve os 200,, uns 50, 50, modo m para m nos modos eixo -10, 251, - 1, 1 1 modos de legenda, loc centro inferior com pyplot e numpy importado lapis Mar 24 14 at 13 56.pandas é mais adequado Para isso do 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 no desempenho com qualquer implementação de Python puro personalizado Aqui está um exemplo de desempenho contra duas das soluções propostas. Há também boas opções de como lidar com Os valores de borda. Estou sempre irritado pela função de processamento de sinal que retornam sinais de saída de forma diferente dos 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 variável independente relacionada, Plotting ou comparação não é uma questão direta de qualquer maneira, se você compartilhar o sentimento, você pode querer mudar as últimas linhas da função proposta como mesmo retorno y windowlen-1 - windowlen-1 Christian O Reilly 25 de agosto 15 a 19 56.A bit Tarde para a festa, mas eu fiz a minha própria função pouco que não envolver em torno das extremidades ou almofadas com zeros que são usados ​​para encontrar a média, bem como um tratamento adicional é, que também é - amostra o sinal em pontos espaçados linearmente. Personalize o código à vontade para obter outras características. O método é uma simples multiplicação de matriz com um kernel normalizado gaussiano. Uso simples em um sinal sinusoidal com ruído distribuído normal adicionado. Esta questão é agora ainda mais antiga Do que quando NeXuS escreveu sobre isso no mês passado, MAS eu gosto de como seu código lida com borda casos No entanto, porque é uma média móvel simples, s resultados ficam para trás os dados que se aplicam a eu pensei que lidar com borda casos de uma forma mais satisfatória Modo que NumPy s modos válidos mesmo e completo poderia ser alcançado através da aplicação de uma abordagem semelhante a um convolution método baseado. Minha contribuição usa uma média de execução central para alinhar os seus resultados com os seus dados Quando existem dois pontos disponíveis para a janela de tamanho completo Para ser usado, as médias correntes são calculadas a partir de janelas sucessivamente menores nas bordas da matriz Na verdade, a partir de janelas sucessivamente maiores, mas isso é um detalhe de implementação. É relativamente lento b Ecause 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 limite Eu próprio implementou 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 Acho útil e quer algumas expansões, por favor me avise e eu vou atualizar esta resposta Uma vez que escrever uma explicação pode custar-me muito tempo, espero que eu fazê-lo apenas quando alguém precisa dele Por favor, perdoe-me para a minha preguiça. Interessado em sua versão original. É ainda mais ilegível a primeira solução se livrar do problema de borda por preenchimento zeros em torno da matriz, mas a segunda solução postada aqui lida com ele de uma maneira dura e direta. Em minha última frase eu estava tentando indicar Por que ele ajuda a erro de ponto flutuante Se dois valores são aproximadamente a mesma ordem de grandeza, em seguida, adicioná-los perde menos precisão do que se você adicionou um número muito grande para um muito pequeno O código combina valores adjacentes de uma forma que mesmo somas intermediárias devem sempre Ser razoavelmente próximo em magnitude, para minimizar o erro de ponto flutuante Nada é à prova de tolo, mas este método salvou um casal projetos muito mal implementados em produção Mayur Patel 15 de dezembro de 17 em 17 22. Alleo Em vez de fazer uma adição por valor, Fazendo duas 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 64 bits valores não excederia 64 elementos no cache, por isso é amigável na memória Uso também Mayur Patel 29 de dezembro de 14 em 17 04.

No comments:

Post a Comment