Sunday 27 August 2017

Plot Moving Average Python


Preciso de ajuda para traçar uma média móvel em cima dos dados que já consigo traçar (veja abaixo) Estou tentando fazer m (minha média móvel) igual ao comprimento de y (meus dados) e, em seguida, dentro do meu loop for, Parece que tenho a matemática correta para a minha média móvel. O que funciona: traçando x e y O que não funciona: traçando m em cima de x amp y e me dá esse erro RuntimeWarning: valor inválido encontrado em doblescalars Minha teoria: estou configurando m para np. arrays y. haha e depois criando meu para Loop para fazer m igual ao conjunto de matemática dentro do ciclo, substituindo assim todos os 0s pela média móvel, acho que a resposta do lmjohns3 está correta, mas você tem alguns problemas com sua função de média móvel. Em primeiro lugar, há o problema de indexação que o lmjohns3 apontou. Pegue os seguintes dados, por exemplo: Sua função fornece os seguintes valores médios móveis: o tamanho dessa matriz (7) é muito pequeno por um número. O último valor na média móvel deve ser (789) 38. Para corrigir que você poderia alterar sua função da seguinte maneira: O segundo problema é que, para traçar dois conjuntos de dados, o número total de pontos de dados precisa ser o mesmo . Sua função retorna um novo conjunto de dados que é menor do que o conjunto de dados original. (Você talvez não tenha notado porque você pré-atribuiu uma matriz de zeros do mesmo tamanho. Seu loop for sempre produzirá uma matriz com um monte de zero no final.) A função de convolução fornece os dados corretos, mas tem dois valores extras ( Alguns em cada extremidade) devido ao mesmo argumento, o que garante que a nova matriz de dados tenha o mesmo tamanho que o original. Como um método alternativo, você poderia vetualizar seu código usando a função Numpys cumsum. (O último é uma modificação da resposta em uma publicação anterior.) O truque pode ser que você deve soltar os primeiros valores da matriz da data. Por exemplo, use a seguinte chamada de plotagem, onde n é o número de pontos na sua média: o problema aqui vive em sua computação da média móvel - você apenas tem alguns problemas off-by-one na indexação. Aqui, você obteve Tudo certo, exceto para: 1. Isso diz ao intérprete que faça uma fatia começando pelo que i-10 aconteça e acabe apenas antes de 1. Mas se i-10 for maior do que 1. isso resulta na lista vazia. Para corrigi-lo, basta substituir 1 com i. Além disso, seu alcance precisa ser estendido por um no final. Substitua y. shape0 por y. haha01. Alternativa, eu apenas pensei em mencionar que você pode calcular a média móvel de forma mais automática usando np. convolve (docs): neste caso, m terá o mesmo comprimento que y. Mas os valores médios móveis podem parecer estranhos no início e no final. Isso ocorre porque o mesmo efetivamente faz com que y seja preenchido com zeros em ambas as extremidades, de modo que haja suficientes valores de y para usar na computação da convolução. Se você preferir obter apenas valores médios móveis que são computados usando valores de y (e não de preenchimento zero adicional), você pode substituir o mesmo por válido. Neste caso, como Ryan observa, m será menor do que y (mais precisamente, len (m) len (y) - len (filtro) 1), que você pode abordar em sua trama removendo o primeiro ou o último elemento de Sua matriz de datas. Respondeu 17 de agosto às 20: 58 Estou jogando em Python um pouco novamente, e encontrei um livro limpo com exemplos. Um dos exemplos é traçar alguns dados. Eu tenho um arquivo. txt com duas colunas e eu tenho os dados. Eu planejei os dados bem, mas no exercício que diz: Modifique seu programa para calcular e traçar a média de execução dos dados, definida por: onde r5 neste caso (e o yk é a segunda coluna no arquivo de dados) . Peça ao programa que trace os dados originais e a média de corrida no mesmo gráfico. Até agora eu tenho isso: Então, como faço para calcular a soma Em Mathematica é simples desde a manipulação simbólica (Sumi, por exemplo), mas como calcular a soma em python, que leva cada dez pontos nos dados e a média, e faz isso Até o final dos pontos eu olhei para o livro, mas não encontrei nada que explicasse isso: o código da Heltonbikers fez o truque: D Muito obrigado :) Existe um problema com a resposta aceita. Eu acho que precisamos usar o válido em vez do mesmo aqui - retornar numpy. convolve (intervalo, janela, o mesmo). Como um exemplo, experimente a MA desse conjunto de dados 1,5,7,2,6,7,8,2,2,7,8,3,7,3,7,3,15,6 - o resultado Deve ser de 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 ter o mesmo dá-nos uma saída incorreta 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 oxidado para tentar isso -: Tente com um válido amplificador e veja se a matemática faz sentido. Respondeu 29 de outubro 14 às 4:27 Haven39t tentou isso, mas eu vou olhar para ele, faz um tempo desde que eu fui codificado em Python. Ndash dingod 29 de outubro 14 às 7:07 dingod Por que não tenta rapidamente isso com o código oxidado (e o conjunto de dados de amostra (como uma lista simples), publiquei. Para algumas pessoas preguiçosas (como eu já estive no início) - está mascarando o fato de que a média móvel está incorreta. Provavelmente você deveria considerar a edição de sua resposta original. Eu tentei isso apenas ontem e a verificação dupla me salvou face de parecer ruim em relatar ao nível Cxo. Tudo o que você precisa fazer é tentar Sua mesma média móvel uma vez com quotvalidquot e outra vez com quotsamequot - e uma vez que você está convencido me dê algum amor (aka-up-vote) ndash ekta 29 de outubro às 7:16

No comments:

Post a Comment