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 att göra det mer effektivt, faktiskt om vem som helst 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 en numpy array istället för en lista, men jag ville eliminera alla beroenden. Det skulle också vara möjligt att förbättra prestanda med multi-threaded utförandet. Funktionen förutsätter att ingångslistan är endimensionell, så var försiktig. Du kan beräkna ett löpande medelvärde med. Lyckligtvis innehåller numpy en convolve-funktion som vi kan använda för att påskynda sakerna. Runningmedlet motsvarar att convolving x med en vektor som är N lång, med alla medlemmar lika med 1 N Den numpy implementeringen av convolve inkluderar starttidspunkten, så du måste ta bort de första N-1 poängen. På min maskin är den snabba versionen 20-30 gånger snabbare, beroende på På längden av inmatningsvektorn och storleken på det genomsnittliga fönstret. Notera som convolve inkluderar ett samma läge som verkar som att det borde adressera det övergående övergående problemet, men det delar upp det mellan början och slutet. Det tar bort transienten 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 noll som inte finns där i data-värdet, här är ett kommando för att visa skillnaden mellan lägena lägena fulla, samma, giltiga plot sammanfoga dem 200,, en 50, 50, läget m för m i lägena axel -10, 251, -1 1 1 legend lägen, lok lägre center med pyplot och numpy importerade lapis Mar 24 14 på 13 56.pandas är mer lämplig för detta än NumPy eller SciPy. Funktionen rollingmean gör jobbet bekvämt. Det returnerar också ett NumPy-array när ingången är en array. Det är svårt att slå rollingmean i prestanda med någon anpassad ren Python-implementering Här är ett exempel prestanda mot två av de föreslagna lösningarna. Det finns också fina alternativ för hur man hanterar kantvärdena. Jag är alltid irriterad av signalbehandlingsfunktionen som returnerar utsignaler av annan form än ingångssignalerna när både ingångar och utgångar är av samma natur T ex både tidsmässiga signaler Det bryter korrespondensen med relaterad oberoende variabel, t. ex. tid, frekvens gör plotting 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 återvändande och 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 som Väl som en ytterligare behandling är att det också samplar signalen på linjärt åtskilda punkter Anpassa koden på viljan för att få andra funktioner. Metoden är en enkel matrismultiplikation med en normaliserad Gaussisk kärna. En enkel användning o na sinusformad signal med tillsatt normalt distribuerat brus. Denna fråga ä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 glidande medelvärde, ligger resultaten bakom data de tillämpar på jag trodde att hantering av kantfall på ett mer tillfredsställande sätt än NumPy s-lägen som var lika och fullständiga kunde uppnås genom att tillämpa ett liknande tillvägagångssätt för 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 den fullstora fönstret som ska användas, beräknas löpande medelvärden beräknas från successivt mindre fönster vid kanterna av arrayen 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. Svarade den 2 januari på 0 28. är fin men långsam när fönstret breddar H växer stort Vissa svar ger mer effektiva algoritmer med men verkar inte kunna hantera kanten värden Jag har själv genomfört en algoritm som kan hantera detta problem bra om det här problemet förklaras som. Inputparameter mergenum kan anses som 2 fönsterbredd 1.Jag vet Den här koden är lite oläslig om du tycker att den är användbar och vill ha några expanationer, var snäll och låt mig veta och jag uppdaterar det här svaret. Eftersom en förklaring kan kosta mig mycket tid hoppas jag bara gör det när någon behöver det. Vänligen förlåt mig för min lathet. Om du bara är intresserad av sin ursprungliga version. Det är ännu mer oläsligt, den första lösningen blir av med kanten problem med padding nollor runt arrayen, men den andra lösningen som skickas här hanterar det på ett tufft och direkt sätt. I min sista meningen försökte jag ange varför det hjälper floating point-felet Om två värden är ungefär samma storleksordning, så lägger de mindre precision än om du lagt till ett mycket stort antal till en mycket liten Koden kombinerar intilliggande värden så att även mellanliggande summor alltid ska vara rimligen nära i storleksordningen, för att minimera floating point-felet. Inget är dumt bevis, men den här metoden har sparat ett par väldigt dåligt genomförda projekt i produktionen. Mayur Patel Dec 15 14 på 17 22. Alleo Istället för att göra en tillägg per värde gör du två. Beviset är detsamma som det bit-flipping-problemet. Poängen med detta svar är inte nödvändigtvis prestanda, men precision. Minnesanvändning för genomsnittliga 64-bitars värden skulle Inte överstiga 64 element i cachen, så det är vänligt i minnesanvändning också Mayur Patel Dec 29 14 på 17 04.Matplotlib är ett Python 2D-plottingsbibliotek som producerar publikationskvalitetsfigurer i en mängd olika hårddiskformat och interaktiva miljöer över plattformar. Matplotlib Kan användas i Python-skript, Python - och IPython-skalet, Jupyter-notebook-datorn, webbapplikationsservrar och fyra grafiska användargränssnittstillsatser. Mattplotlib försöker göra Enkla saker lätt och svårt möjligt Du kan generera tomter, histogram, strömspektra, stapeldiagram, felcharts, scatterplots, etc med bara några rader kod. För en provtagning, se skärmdumpens miniatyrgalleri och exempelkatalog. För att enkelt plotta Pyplotmodul ger ett MATLAB-liknande gränssnitt, i synnerhet i kombination med IPython För kraftanvändaren har du full kontroll över linjestilar, teckensnittegenskaper, axlaregenskaper mm via ett objektorienterat gränssnitt eller via en uppsättning funktioner som är kända för MATLAB-användare. Detta är dokumentationen för Matplotlib-versionen 2 0 0.Trying för att lära sig hur man gör en viss typ av tomt. Kolla in galleri-exemplen eller listan med plotting-kommandon. Övrig inlärningsresurser. Det finns många externa inlärningsresurser tillgängliga, inklusive tryckt material, Videor och tutorials. Matplotlib är ett välkomnande, inkluderande projekt, och vi försöker följa Python Software Foundation Code of Conduct i allt vi gör. Kontrollera faq api docs och Postlista arkiv för resurser Gå med i gitter och postlistor Användare Meddela och utveckla Kolla in Matplotlibfrågorna på stackoverflödet Sökverktyget söker igenom hela dokumentationen, inklusive fullständig textsökning av över 350 kompletta exempel som övar nästan alla hörn av Matplotlib. You kan filbuggar, patchar och funktionsförfrågningar på github-spåraren men det är en bra idé att även pinga på postlistan. För att hålla dig uppdaterad med vad som händer i Matplotlib, se vad som är ny sida eller bläddra i källan Kod Något som kan kräva ändringar av din befintliga kod loggas i api ändringsfilen. Det finns flera Matplotlib-tilläggsverktyg, inklusive ett val av två projektions - och kartläggningsverktygs baskarta och kartopi 3d-plottning med mplot3d-axlar och axelhjälpare i axesgrid flera högre - plattformar gränssnitt havsbotten holoviews ggplot och more. Citing Matplotlib. Matplotlib är brainchild av John Hunter 1968-2012, som tillsammans med sin många bidragsgivare s, har lagt en ovärderlig mängd tid och ansträngning för att producera en mjukvara som används av tusentals forskare världen över. Om Matplotlib bidrar till ett projekt som leder till en vetenskaplig publikation, bekräfta detta arbete genom att citera projektet. Du kan använda denna färdiga Gjort citation entry. Open source. The Matplotlib licens är baserat på Python Software Foundation PSF licens. Det finns en aktiv utvecklare gemenskap och en lång lista av personer som har gjort betydande bidrag. Matplotlib är värd för Github Issues och Pull förfrågningar spåras på Github också. MATLAB är ett registrerat varumärke som tillhör The MathWorks, Inc. Copyright 2002 - 2012 John Hunter, Darren Dale, Eric Firing, Michael Droettboom och utvecklingsgruppen Matplotlib 2012 - 2016 Utvecklingslaget Matplotlib Senast uppdaterad 20 feb 2017 Skapat med Sphinx 1 5 2. Vi introducerade tidigare hur man skapar glidande medelvärden med python. Denna handledning kommer att fortsätta med detta ämne. Ett rörligt medelvärde i statistikens sammanhang, även kallat rullande löpande medelvärde, är en typ av finitivt impulsrespons. I vår tidigare handledning vi har ritat värdena för arrayerna x och y. Låt s plot x mot det glidande medlet av y som vi ska kalla yMA. Firstly, låt s utjämna längden på båda arrays. And att visa detta i context. The resulting graph. To Hjälp förstå detta, låt s plot två olika relationer x vs y och x vs MAY. The glidande medelvärdet här är den gröna plot som börjar vid 3.I fortsättningen av denna handledning lär vi oss att beräkna glidande medelvärden på stora dataset .
No comments:
Post a Comment