Monday 23 April 2018

Numpy moving average convolve


Eu estou escrevendo uma função de média móvel que usa a função convolve em numpy, que deve ser equivalente a uma média móvel ponderada Quando meus pesos são todos iguais como em uma média aritmética simples, ele funciona bem. No entanto, quando eu tento usar uma ponderada Em vez de para os mesmos dados 3 667,4 667,5 667,6 667 Eu espero, eu get. Se eu remover a bandeira válida, eu nem vejo os valores corretos que eu realmente gostaria de usar convolve para o WMA, bem como MA como faz o código mais limpo mesmo código, pesos diferentes e de outra forma eu acho que eu vou ter que percorrer todos os dados e tomar slices. Any idéias sobre este comportamento. Python Examples. The seguintes são 13 exemplos de código para mostrar Como usar Eles são extraídos de projetos open source Python Você pode clicar para votar até os exemplos que você gosta, ou clique para votar nos exemplos que você não gosta Seus votos serão usados ​​em nosso sistema para extrair mais exemplos de alta qualidade. Também pode verificar todas as funções disponíveis classes do módulo numpy Ou tente a função de pesquisa. A partir de projeto de faísca em ferramentas de diretório em arquivo de origem. Do projeto CommPy em diretório commpy channelcoding em arquivo de origem. De projeto CommPy em diretório commpy channelcoding em arquivo de origem. De projeto pybv em diretório src pybv mundos em arquivo de origem. Do projeto paperwalking sob o diretório decodificador no arquivo de fonte. Do projeto nupic sob o diretório regiões nupic ImageSensorFilters no arquivo de fonte. Do projeto clojure-nltk sob recursos de diretório nltk tokenize em arquivo de fonte. De projeto jazzparser em diretório lib nltk tokenize em arquivo de fonte. Facet-calibration-master em diretório facet-calibração-pipeline scripts em arquivo de origem. From projeto capo em diretório dcj cals em arquivo de origem. From projeto Capitol-Palavras em diretório cwodsite cwodapi em arquivo de origem. From projeto nltk sob diretório nltk tokenize em fonte File. From projeto procgraph em diretório src procgraphnumpyops em arquivo de origem. Por favor, habilite JavaScript para v 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 Para torná-lo mais eficiente, na verdade, se algué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 Para melhorar o desempenho por multi-threaded execução. A função assume que a lista de entrada é um dimensional, 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 o 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 modes. answered Mar 24 14 at 22 01.I like this solução Porque é limpa uma linha e trabalho relativamente eficiente 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 corrida média com. Felizmente, numpy inclui uma função convolve 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 igual a 1 N A implementação numpy de convolve inclui o transiente inicial, então você tem que remover os primeiros pontos N-1. Minha máquina, a versão rápida é 20-30 vezes mais rápida, 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 inicial, mas divide Ele entre o começo eo fim. Remove o transiente do fim eo começo 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 em direção a zer O que não está lá nos dados BTW, aqui está um comando para mostrar a diferença entre os modos de modos cheio, mesmo, convênio convolução válido 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 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 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 opções agradáveis ​​sobre como lidar com os valores de borda. Eu estou sempre irritado por 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 a variável independente relacionada, por exemplo, tempo, freqüência fazendo plotagem 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 o mesmo retorno xml feed Um pouco tarde para a festa , Mas eu fiz minha própria função pouco que não envolve 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 re-amostras do sinal em pontos espaçados linearmente Personalizar o Código à vontade para obter outros recursos. O método é uma multiplicação de matriz simples com um kernel normalizado gaussiano. Um uso simples em um sinal sinusoidal com normal adicionado de ruído distribuído. 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 os casos de borda No entanto, porque é uma média móvel simples, ele s resultados ficam atrás dos dados que se aplicam a eu pensei que lidar com borda casos de uma forma mais satisfatória do que NumPy s modos válidos mesmo e completo poderia Ser alcançado aplicando um Milar para um método baseado em convolução. 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 correntes são calculadas a partir de janelas sucessivamente menores nas bordas Do array Na verdade, a partir de janelas sucessivamente maiores, mas isso é um detalhe de implementação. É relativamente lento, porque ele usa convolve e provavelmente poderia ser arrumado muito por um verdadeiro Pythonista, no entanto, acredito que a idéia é. 2 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 os valores de limite Eu próprio implementei 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 Sinc E escrever uma explicação pode custar-me muito tempo, espero que eu fazê-lo 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 da borda Problema por preencher zeros em torno da matriz, 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 o erro de ponto flutuante 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 para 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 isso Método salvou um casal projetos muito mal implementados na produção Mayur Patel 15 de dezembro 14 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 proble M 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 04.

No comments:

Post a Comment