Saturday 8 February 2020

Numpy disposição média móvel


Hmmm, parece que este quoteasy para implementar a função é realmente muito fácil de errar e tem promovido uma boa discussão sobre a eficiência da memória. I39m feliz por ter bloat se isso significa saber que something39s sido feito direito. Ndash Richard Sep 20 14 at 19:23 NumPys falta de uma determinada função específica de domínio é talvez devido à disciplina Core Teams e fidelidade à diretiva NumPys principal: fornecer um tipo de matriz N-dimensional. Bem como funções para criar e indexar essas matrizes. Como muitos objetivos fundacionais, este não é pequeno, e NumPy faz isso brilhantemente. O SciPy (muito) maior contém uma coleção muito maior de bibliotecas específicas de domínio (chamadas subpacotes por SciPy devs) - por exemplo, otimização numérica, processamento de sinal (sinal) e cálculo integral (integrar). Minha suposição é que a função que você está depois está em pelo menos um dos subpáginas SciPy (scipy. signal talvez) no entanto, eu iria olhar primeiro na coleção SciPy scikits. Identificar o (s) scikit (s) relevante (s) e procurar a função de interesse lá. Scikits são desenvolvidos independentemente pacotes baseados em NumPy / SciPy e dirigidos a uma determinada disciplina técnica (por exemplo, scikits-image. Scikits-learn, etc.) Vários destes foram (em particular, o incrível OpenOpt para otimização numérica) foram altamente considerado, maduro Projetos muito antes de escolher para residir sob a rubrica relativamente nova scikits. A página inicial do Scikits gostava de listar cerca de 30 scikits como esse. Embora pelo menos alguns deles já não estejam em desenvolvimento. Seguindo este conselho o levaria a scikits-timeseries no entanto, que o pacote não está mais em desenvolvimento ativo Em efeito, Pandas tornou-se, AFAIK, a biblioteca de série de facto NumPy tempo. Pandas tem várias funções que podem ser usadas para calcular uma média móvel o mais simples destes é provavelmente rollingmean. Que você usa assim: Agora, basta chamar a função rollingmean passando no objeto Series e um tamanho de janela. Que no meu exemplo abaixo é de 10 dias. Verificar que funcionou - por exemplo. Os valores comparados 10-15 na série original versus a nova série alisada 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 a média ponderada exponencialmente em movimento). O fato de que este segundo grupo não está incluído na primeira (funções de janela em movimento) é talvez porque as transformações exponencialmente ponderadas não dependem de um eixo de comprimento fixo de windownumpy. ma. average ao longo do qual a média é calculada. O padrão é calcular a média do array achatado. Pesos. Arraylike, optional A importância que cada elemento tem na computação da média. A matriz de pesos pode ser 1-D (caso em que seu comprimento deve ser o tamanho de um ao longo do eixo dado) ou da mesma forma como a. Se weightsNone. Então todos os dados em um são assumidos para ter um peso igual a um. Se os pesos forem complexos, as partes imaginárias são ignoradas. devolvida . Bool, opcional Sinalizador indicando se uma tupla (resultado, soma de pesos) deve ser retornada como saída (Verdadeiro), ou apenas o resultado (Falso). O padrão é False. Média, sumofweights. (Tupla de) scalar ou MaskedArray A média ao longo do eixo especificado. Quando retornado é True. Retorna uma tupla com a média como o primeiro elemento ea soma dos pesos como o segundo elemento. O tipo de retorno é np. float64 se a é de tipo inteiro e flutua menor que float64. Ou o tipo de dados de entrada, caso contrário. Se retornado, sumofweights é sempre float64. Na 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 para um muito pequeno. O código combina valores quotadjacentquot 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 projetos muito mal implementados na produção. Ndash Mayur Patel Dec 15 14 at 17:22 Alleo: Em vez de fazer uma adição por valor, você estará fazendo dois. A prova é o mesmo que o problema de bit-flipping. No entanto, o ponto dessa resposta não é necessariamente desempenho, mas precisão. O uso de memória para a média de valores de 64 bits não excederia os 64 elementos no cache, portanto também é amigável no uso de memória. Ndash Mayur Patel Dec 29 14 às 17:04 UPD: soluções mais eficientes foram propostas por Alleo e jasaarim. Você pode usar np. convolve para isso: O argumento mode especifica como lidar com as arestas. Eu escolhi o modo válido aqui porque eu acho que é como a maioria das pessoas esperam correr significa trabalhar, mas você pode ter outras prioridades. Aqui está um gráfico que ilustra a diferença entre os modos: 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 corrida é 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 N-1 pontos: Na minha máquina, a versão rápida é 20-30 vezes mais rápida, dependendo do comprimento do vetor de entrada e do tamanho da janela de média . Note que convolve não incluir 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 transitório 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 está lá nos dados. BTW, aqui está um comando para mostrar a diferença entre os modos: modos (39full39, 39same39, 39valid39) plot (convolve (ones ((200)), uns (50,)) 4750, modem) Eixo (-10, 251, -.1, 1.1) legenda (modos, loc39lower center39) (com pyplot e numpy importados). Ndash lapis Mar 24 14 at 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 é uma matriz. É difícil de bater o rollingmean no desempenho com qualquer implementação personalizada Python puro. Aqui está um exemplo de desempenho contra duas das soluções propostas: Existem também opções agradáveis ​​sobre como lidar com os valores de limite. I39m 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). Ele quebra a correspondência com a variável independente relacionada (por exemplo, tempo, freqüência) tornando a 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 ynp. convolve (w / w. sum (), s, mode39same39) return ywindowlen-1 :-( windowlen-1) ndash Christian O39Reilly 25 de agosto às 19:56 lapis sim, mas vamos dizer que você usar o método cumsum no primeiro tick e salvar a sua média de rolamento médio para o próximo carrapato. Cada carrapato depois disso você só tem que acrescentar o mais recente valor da média móvel para a sua matriz de rolamento em armazenamento. Usando este método você não está recalculando coisas que você já calculou: Na primeira vez que você cumsum depois disso, basta acrescentar o quotmean dos elementos do último período que é 2x mais rápido para todos os carrapatos subseqüentes. Ndash litepresence Jun 10 at 12: 29numpy. average Eixo ao longo do qual a média a. Se Nenhum. A média é feita sobre o arranjo achatado. Pesos. Arraylike, optional Uma matriz de pesos associados com os valores em a. Cada valor em a contribui para a média de acordo com seu peso associado. A matriz de pesos pode ser 1-D (caso em que seu comprimento deve ser o tamanho de um ao longo do eixo dado) ou da mesma forma como a. Se weightsNone. Então todos os dados em um são assumidos para ter um peso igual a um. devolvida . Bool, opcional O padrão é False. Se for verdade . A tupla (média de sumofweights) é retornada, caso contrário apenas a média é retornada. Se weightsNone. Sumofweights é equivalente ao número de elementos sobre os quais a média é tomada. Média, sumofweights. Arraytype ou double Retorna a média ao longo do eixo especificado. Quando retornado é True. Retorna uma tupla com a média como o primeiro elemento ea soma dos pesos como o segundo elemento. O tipo de retorno é Float se a for de tipo inteiro, caso contrário ele é do mesmo tipo que a. Sumofweights é do mesmo tipo que a média. 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 da estatística, também chamada média de rolamento / corrida, é um tipo de resposta de impulso finito. Em nosso tutorial anterior traçamos os valores das matrizes xey: Let8217s traçam x contra a média móvel de y que chamaremos yMA: Em primeiro lugar, let8217s equalizar o comprimento de ambos os arrays: E para mostrar isso no contexto: O resultado Gráfico: Para ajudar a entender isso, let8217s trama dois relacionamentos diferentes: x vs y e x vs MAy: A média móvel aqui é a parcela verde que começa em 3: Compartilhe isso: Como este: Related Post navegação Deixe uma resposta Cancelar resposta Very useful Gostaria de ler a última parte sobre grandes conjuntos de dados Espero que venha em breve8230 d blogueiros como este:

No comments:

Post a Comment