Tuesday 15 August 2017

Numpy Glidande Medelvärde Falta


Jag skriver en glidande genomsnittsfunktion som använder konvolverfunktionen i numpy, vilket borde motsvara ett viktat glidande medelvärde. När mina vikter är alla lika som i ett enkelt aritmatiskt medel fungerar det bra. Men när jag försöker använda en viktad I genomsnitt för de samma uppgifterna 3 667,4 667,5 667,6 667 förväntar jag mig att få. Om jag tar bort den giltiga flaggan ser jag inte ens rätt värden som jag verkligen skulle vilja använda convolve för WMA och MA eftersom det gör koden renare samma kod, olika vikter och annars tror jag att jag måste slingra igenom alla data och ta skivor. Alla idéer om detta beteende. Exempel på exempel. Följande är 13 kodexempel för visning Hur man använder dem De är extraherade från Python-projekt med öppen källkod Du kan klicka för att rösta på exemplen du vill eller klicka för att rösta ned exemplen du inte tycker om. Din röst kommer att användas i vårt system för att extrahera fler exemplar av hög kvalitet. Kan också kolla alla tillgängliga funktioner klasser av modulen numpy Eller försök sökfunktionen. Från projekt gnista under katalogverktyg i källfilen. Från projektet CommPy under katalogen commpy channelcoding i källfilen. Från projektet CommPy under katalogen commpy channelcoding i källfilen. Från projektet pybv under katalogen src pybv-världar i källfilen. Från projekt paperwalking under katalogavkodare i källfilen. Från projekt nupic under katalog nupic regioner ImageSensorFilters i källfilen. Från projekt clojure-nltk under katalogresurser, ange i källfilen. Från projekt jazzparser under katalog lib nltk tokenize i källfilen. Från projekt Facet-kalibrerings-mästare under katalogfaset-kalibrerings-pipeline-skript i källfilen. Från projektkapitel under katalogen dcj-kedjor i källfilen. Från projekt Capitol-Words under katalogen cwodsite cwodapi i källfilen. Från projektnamn under katalogen att tillägna sig i källan File. From projekt procgraph under katalogen src procgraphnumpyops i källfilen. Aktivera JavaScript till v Iew kommentarer som diskuteras av Disqus. Jag vet att det här är en gammal fråga, men här är en lösning som inte använder några extra datastrukturer eller bibliotek. Det är linjärt i antalet element i ingångslistan och jag kan inte tänka på något annat sätt För att göra det effektivare faktiskt om någon vet om ett bättre sätt att fördela resultatet, var snäll och låt mig veta. NOTE det här skulle vara mycket snabbare med ett numpy array istället för en lista, men jag ville eliminera alla beroenden. Det skulle också vara möjligt För att förbättra prestanda genom multi-threaded execution. The funktion förutsätter att ingångslistan är endimensionell, så var försiktig. UPD effektivare lösningar har föreslagits av Alleo och jasaarim. You kan använda för det. Mode argumentet anger hur man hanterar Kanter Jag valde det giltiga läget här för att jag tror det är hur de flesta förväntar sig att fungera, men du kan ha andra prioriteringar. Här är en plot som illustrerar skillnaden mellan lägena. Svarade mar 24 14 på 22 01. Jag gillar det här lösning Eftersom det är rent en linje och relativt effektivt arbete som görs inom numpy Men Alleo s Effektiv lösning använder har bättre komplexitet Ulrich Stern Sep 25 15 på 0 31. Du kan beräkna ett löpande medelvärde. Lyckligtvis innehåller numpy en convolve-funktion som vi kan använda För att påskynda sakerna Det löpande medelvärdet är ekvivalent med att ingå x med en vektor som är N lång, med alla medlemmar lika med 1 N Den numpiga implementeringen av convolve inkluderar starttidspunkten, så du måste ta bort de första N-1-poängen. Min maskin, den snabba versionen är 20-30 gånger snabbare beroende på längden på ingångsvektorn och storleken på medelvärdet. Notera som convolve inkluderar en samma mod som verkar som att den borde ta itu med det startande övergående problemet, men det delar upp Det mellan början och slutet. Det tar bort övergången från slutet, och början har inte en. Tja, jag antar att det är fråga om prioriteringar, jag behöver inte samma antal resultat på bekostnad av att få en sluttning mot zer O det finns inte det i datat BTW, här är ett kommando för att visa skillnaden mellan lägena lägena, samma, giltiga plot convolve ones 200, ones 50, 50, läget m för m i lägena axel -10, 251, - 1, 1 1 Legitimationslägen, Låg lägre center med pyplot och numpy importerad lapis Mar 24 14 på 13 56.pandas är mer lämplig för detta än NumPy eller SciPy. Funktionsvalsfunktionen gör jobbet bekvämt. Det returnerar också ett NumPy-array när ingången Är en array. It är svårt att slå rollingmean i prestanda med någon anpassad ren Python implementation. Här är ett exempel prestanda mot två av de föreslagna lösningarna. Det finns också fina alternativ om hur man hanterar kantvärdena. Jag är alltid irriterad av Signalbehandlingsfunktion som returnerar utsignaler av annorlunda form än ingångssignalerna när både ingångar och utgångar är av samma karaktär, t ex båda tidssignalerna. Den bryter korrespondensen med relaterad oberoende variabel, t. ex. tid, frekvensbildning av plottning eller jämförelse inte En direkt fråga ändå, om du delar känslan, kanske du vill ändra de sista raderna i den föreslagna funktionen som samma återkomst y windowlen-1 - windowlen-1 Christian O Reilly aug 25 15 på 19 56. En bit sent till festen , Men jag har gjort min egen lilla funktion som INTE viklar runt ändarna eller dynorna med nollor som sedan används för att hitta medelvärdet också. Som en ytterligare behandling är det också att samplera signalen på linjärt åtskilda punkter. Anpassa Kod på viljan för att få andra funktioner. Metoden är en enkel matrismultiplicering med en normaliserad Gaussisk kärna. En enkel användning på en sinusformad signal med normalt normalfördelat brus. Den här frågan är nu ännu äldre än när NeXuS skrev om det förra månaden, MEN Jag tycker om hur hans kod handlar om kantfall Men eftersom det är ett enkelt rörligt medelvärde, är det s resultat som ligger bakom de data de tillämpar på jag trodde att hantering av kantfall på ett mer tillfredsställande sätt än NumPy s-lägena var lika och fulla Uppnås genom att tillämpa en si Miljärt tillvägagångssätt till en konvolutionbaserad metod. Mitt bidrag använder ett centralt löpande medelvärde för att anpassa sina resultat med deras data. När det finns två få punkter tillgängliga för det stora formatet som ska användas, beräknas genomsnittsvärden från successivt mindre fönster vid kanterna Av matrisen Egentligen från successivt större fönster, men det är en implementeringsdetalj. Det är relativt långsamt eftersom det använder convolve och kan sannolikt spruced upp ganska mycket av en sann Pythonista, men jag tror att tanken står. 2 vid 0 28. Det är trevligt men långsamt när fönstrets bredd blir stor Vissa svar ger mer effektiva algoritmer med men verkar inte kunna hantera kantvärden Jag har själv genomfört en algoritm som kan hantera detta problem bra om problemet uppges som. Input Parameter mergenum kan betraktas som 2 windowwidth 1. Jag vet att den här koden är lite oläslig om du tycker att den är användbar och vill ha några expanations, snälla låt mig veta och jag ska uppdatera detta svar Sinc Att skriva en förklaring kan kosta mig mycket tid, jag hoppas jag gör det bara när någon behöver det. Vänligen förlåt mig för min latskap. Om du bara är intresserad av sin ursprungliga version. Det är ännu mer oläsligt blir den första lösningen av med kant Problem genom att padda nollor runt matrisen, men den andra lösningen som skickas här hanterar den på ett tufft och direkt sätt. I min sista mening försökte jag ange varför det hjälper floating point-felet om två värden är ungefär samma storleksordning, då Lägga till dem förlorar mindre precision än om du lagt till ett mycket stort tal till en mycket liten kod. Koden kombinerar intilliggande värden så att även mellanliggande summor alltid ska vara rimligt nära i storleksordningen, för att minimera floating point-felet. Inget är dumt bevis men detta Metoden har sparat ett par väldigt dåligt genomförda projekt i produktionen Mayur Patel dec 15 14 på 17 22. Alleo I stället för att göra en tillägg per värde, kommer du att göra två Beviset är detsamma som det bit-flipping proble M Poängen med detta svar är emellertid inte nödvändigtvis prestanda, men precision Minnesanvändningen för genomsnittliga 64-bitars värden skulle inte överstiga 64 element i cacheminnet, så det är vänligt i minnesanvändning också Mayur Patel 29 december 14 kl 17 04.

No comments:

Post a Comment