Monday, October 24, 2016

Numpy Bewegende Gemiddelde Function

numpy. average Axis waarlangs om gemiddeld 'n. As een. gemiddelde gedoen oor die plat skikking. gewigte. arraylike, opsioneel 'n verskeidenheid van gewigte wat verband hou met die waardes in 'n. Elke waarde in 'n bydrae lewer tot die gemiddelde volgens sy verwante gewig. Die gewigte array kan óf 1-D (in welke geval moet sy lengte van die grootte van 'n langs die gegewe as wees) of van dieselfde vorm as 'n. As weightsNone. dan sal al die data in 'n word aanvaar dat 'n gewig gelyk aan een het. teruggekeer . Bool, opsionele Standaard is Vals. As dit waar is. die tuple (gemiddelde. sumofweights) teruggestuur, anders net die gemiddelde teruggestuur. As weightsNone. sumofweights is gelykstaande aan die aantal elemente waaroor die gemiddelde geneem. gemiddelde, sumofweights. arraytype of dubbel terug die gemiddelde langs die gespesifiseerde as. Wanneer teruggekeer waar is. terugkeer 'n tuple met die gemiddelde as die eerste element en die som van die gewigte as die tweede element. Die tipe terugkeer is Float as a van heelgetal tipe, anders is dit van dieselfde soort as 'n. sumofweights is van dieselfde soort as die gemiddelde. Hmmm, dit lyk hierdie quoteasy te funksioneer implementquot is eintlik redelik maklik om te kry verkeerd en het 'n goeie gesprek oor geheue doeltreffendheid bevorder. I39m gelukkig om opblaas het as dit beteken dat die wete dat something39s is reg gedoen. â € Richard September 20 14 by 19:23 NumPys gebrek aan 'n spesifieke domein-spesifieke funksie is dalk te danke aan die Core Spanne dissipline en getrouheid aan NumPys eerste aanwysing: bied 'n N-dimensionele skikking tipe. asook funksies vir die skep, en kruip die skikkings. Soos baie fundamentele doelwitte, hierdie een is nie klein en Numpy doen dit briljant. Die (baie) groter Scipy bevat 'n veel groter versameling van domein-spesifieke biblioteke (genoem subpakette insluit deur Scipy devs) - byvoorbeeld, numeriese optimalisering (optimaliseer), sein Verwerk (sein), en integraalrekening (integreer). My raaiskoot is dat die funksie wat jy soek is in ten minste een van die Scipy subpakette insluit (scipy. signal miskien) Maar ek sal eers kyk in die versameling van Scipy scikits. identifiseer die relevante scikit (s) en kyk vir die funksie van belang daar. Scikits is (bv scikits-beeld. Scikits-leer. Ens) onafhanklik van mekaar ontwikkel pakkette wat gebaseer is op Numpy / Scipy en gerig word aan 'n bepaalde tegniese dissipline Verskeie van hulle was (in die besonder, die ontsagwekkende OpenOpt vir numeriese optimalisering) is hoog aangeskryf, volwasse projekte lank voor die keuse onder die relatief nuwe scikits rubriek te woon. Die Scikits tuisblad graag bogenoemde lyste ongeveer 30 sulke scikits. al ten minste 'n paar van diegene nie meer onder aktiewe ontwikkeling. Na aanleiding van hierdie raad sal jy egter lei tot scikits-tijdreeksen, wat pakket is nie meer onder aktiewe ontwikkeling In effek, het Pandas geword, AFAIK, die de facto Numpy - gebaseerde tydreekse biblioteek. Pandas het verskeie funksies wat gebruik kan word om 'n bewegende gemiddelde die eenvoudigste van hierdie is waarskynlik rollingmean bereken. wat jy gebruik soos so: Nou, net noem die funksie rollingmean verby in die reeks voorwerp en 'n venster grootte. wat in my voorbeeld hieronder is 10 dae. bevestig dat dit gewerk het - Bv. in vergelyking waardes 10 - 15 in die oorspronklike reeks teenoor die nuwe reeks reëlmatige met rollende beteken Die funksie rollingmean, saam met ongeveer 'n dosyn of so ander funksie is informeel gegroepeer in die dokumentasie Pandas onder die rubriek beweeg venster funksies 'n tweede, wat verband hou groep funksies in Pandas word na verwys as eksponensieel-gelaaide funksies (bv ewma. wat eksponensieel bereken beweeg geweegde gemiddelde). Die feit dat hierdie tweede groep is nie ingesluit in die eerste (bewegende venster funksies) is miskien omdat die eksponensieel-geweeg transforms hoef staatmaak op 'n vaste-lengte windowIn my laaste sin is ek probeer om aan te dui waarom dit help swaai punt fout. As twee waardes is min of meer dieselfde orde van grootte, dan voeg hulle minder presisie verloor as wanneer jy 'n baie groot aantal by 'n baie klein een. Die kode kombineer quotadjacentquot waardes op 'n wyse dat selfs intermediêre somme altyd redelik naby in grootte moet wees, om die drywende punt fout te minimaliseer. Niks is fool proof maar hierdie metode het 'n paar baie swak geïmplementeer projekte in produksie gered. â € Mayur Patel 15 Desember 14 by 17:22 Alleo: In plaas van doen 'n toevoeging per waarde, you39ll doen twee. Die bewys is dieselfde as die bietjie daarby probleem. Maar die punt van hierdie antwoord is nie noodwendig prestasie, maar presisie. Geheue gebruik vir gemiddeld 64-bit waardes sou nie meer as 64 elemente in die kas, so it39s vriendelike in geheue gebruik sowel. â € Mayur Patel 29 Desember 14 by 17:04 UPD: meer doeltreffende oplossings is deur Alleo en jasaarim voorgestel. Jy kan np. convolve gebruik vir die volgende: Die modus argument spesifiseer hoe om die rande te hanteer. Ek het die geld af hier, want ek dink dis hoe die meeste mense verwag hardloop gemiddelde om te werk, maar jy kan ander prioriteite het. Hier is 'n plot wat die verskil tussen die modes illustreer: Jy kan 'n lopende bereken bedoel met: Gelukkig Numpy sluit 'n oprollen funksie wat ons kan gebruik om dinge te bespoedig. Die lopende gemiddelde is gelykstaande aan convolving x met 'n vektor wat N lang, met alle lede gelyk aan 1 / N. Die Numpy implementering van oprollen sluit die begin verbygaande, sodat jy die eerste N-1 punte te verwyder: Op my rekenaar, die vinnige weergawe is 20-30 keer vinniger, afhangende van die lengte van die insette vektor en grootte van die gemiddelde venster . Let daarop dat oprollen insluit 'n dieselfde modus wat lyk asof dit die begin verbygaande kwessie moet aanspreek, maar dit split dit tussen die begin en einde. Dit verwyder die verbygaande van die einde, en die begin doesn39t een het. Wel, ek dink it39s 'n kwessie van prioriteite, ek don39t dieselfde aantal resultate moet op die koste om 'n helling na nul dat isn39t daar in die data. BTW, hier is 'n opdrag aan die verskil tussen die modes vertoon: modes (39full39, 39same39, 39valid39) plot (oprollen (kinders ((200,)), kinders ((50,)) 4750, modem)) vir m in modes as (-10, 251, -.1, 1.1) legende (modes, loc39lower center39) (met pyplot en Numpy ingevoer). â € lapis 24 Maart 14 by 13:56 I39m altyd vererg deur seinverwerking funksie wat uitset seine van verskillende vorm terug te keer as die insetseine wanneer beide insette en uitsette is van dieselfde aard (bv beide temporale seine). Dit breek die korrespondensie met verwante onafhanklike veranderlike (bv tyd, frekwensie) maak plot of vergelyking nie 'n direkte saak. In elk geval, as jy die gevoel te deel, kan jy die laaste reëls van die voorgestelde funksie as ynp. convolve (w / w. sum (), S, mode39same39) terugkeer ywindowlen-1 :-( windowlen-1) uitvoering maak Christelike verander O39Reilly 25 Augustus 15 by 19:56 lapis Ja, maar kan sê dat jy cumsum metode gebruik op die eerste blok en stoor jou rollende gemiddelde skikking vir die volgende blok. elke tik daarna moet jy net die nuutste bewegende gemiddelde waarde voeg tot jou rollende verskeidenheid in die stoor. Die gebruik van hierdie metode you39re nie herbereken dinge you39ve reeds bereken: Op die eerste regmerkie cumsum jy daarna jou net voeg die quotmean van die laaste tydperk elementsquot wat vinniger vir alle daaropvolgende bosluise is 2x. â € litepresence 10 Junie by 12: 29Suggestion: gly venster Function 7753 Die gebruik van np. lib. stridetricks. asstride kan 'n mens 'n gly venster wat segmente 'n skikking as 'n preprocessing stap vir vectorized aansoeke baie doeltreffend te skep. Byvoorbeeld 'n bewegende gemiddelde van 'n venster lengte 3. stepsize 1: Dit is baie performante maar baie moeilik om te doen, as die parameters vorm en vordering is baie moeilik om te verstaan. Ek stel voor die implementering van 'n eenvoudige slidingwindow funksie wat die werk van die uitzoeken die twee parameters vir jou doen. beide wat dit baie meer leesbare. Aangesien dit is 'n algemene usecase in vectorized rekenaar Ek stel voor ons 'n soortgelyke funksie in Numpy self. Met betrekking tot waaraan uitvoering te volg, hulle is albei aanvaar verskillende dinge, maar kan jy dieselfde ding uiteindelik doen: skyfies oor een as net laat opstel windowsize en stepsize opbrengste verskeidenheid met dimensie N1 gly oor 'n paar byle vereis twee oproepe (wat kom gratis want daar is geen geheue bijgesteld) het 'n onnodige kopie parameter wat verwyder kan word en vervang word deur die aanbring van. copy () na die oproep skyfies oor die hele byle gelyktydig, is venster lengtes gegee as tuple parameter neem 'n stepsize een in alle rigtings terug skikking met dimensie N2 stepsize nie gelyk aan een vereis sny van uitset data (onseker of dit impliseer kopiëring data) Versper gly oor axisn vereis dat jy n argument stel wshapen 1 of wshapen a. shapen dit beteken vir buigsame stepsize die volgende is ekwivalent (met 'n paar klein fout in slidingwindow daar), want gly oor een as die volgende is ekwivalent (met 'n paar transponering en smaller): en vir gly oor twee as die volgende is ekwivalent: Hierdie kwessie is oor vonkend gesprek oor het ons so 'n funksie Watter eienskappe word vereis Watter nodig koppelvlak moet ons te streef na bespreking Ek is bereid om op te stel 'n trek versoek met 'n uitvoering wat ons ooreengekom op. Terwyl jy 'n gly venster met stride truuks is baie cool, implementering byna enige funksie deur Vectorizing bo-op dit is ondoeltreffend. Ek is nie seker of dit 'n goeie idee om 'n funksie wat mense aanmoedig om daardie roete gaan voorsien, wanneer daar 'funksie in pandas, bottelnek en scipy. ndimage dat hoe meer tipiese gebruik gevalle doeltreffend implemente. Jaime Op Vrydag, 17 Junie 2016 by 13:29, Nils Werner. gt geskryf: Gebruik np. lib. stridetricks. asstride kan 'n mens 'n gly venster baie doeltreffend te skep wat segmente 'n skikking as 'n preprocessing stap vir vectorized aansoeke. Byvoorbeeld 'n bewegende gemiddelde van 'n venster lengte 3, stepsize 1: 'n numpy. arange (10) astrided numpy. lib. stridetricks. asstrided (a, vorm (8, 3), vordering (8, 8)) Print numpy. mean (astrided, axis1) Dit is baie performante maar baie moeilik om te doen, as die parameters vorm en vordering is baie moeilik om te verstaan. Ek stel voor die implementering van 'n eenvoudige slidingwindow funksie wat die werk van die uitzoeken die twee parameters vir jou doen. Die implementering ek het al met behulp vir jare ltgist. github / Nils-Werner / 9d321441006b112a4b116a8387c2280c GT laat die hoër te vervang deur 'n numpy. arange (10) astrided slidingwindow (a, size3, stepsize1) Print numpy. mean (astrided, axis1) teoliphant ltgithub / teoliphant GT het ook 'n uitvoering ltgist. github / teoliphant / 96eb779a16bd038e374f2703da62f06d GT dat bogenoemde sal verander na 'n numpy. arange (10) astrided arrayforslidingwindow (a, 3) Druk numpy. mean (astrided, axis1) beide die maak dit baie meer leesbare. Aangesien dit is 'n algemene usecase in vectorized rekenaar Ek stel voor ons 'n soortgelyke funksie in Numpy self. Met betrekking tot waaraan uitvoering te volg, hulle is albei aanvaar verskillende dinge, maar kan jy dieselfde ding uiteindelik doen: slidingwindow - skyfies oor een as net - laat opstel windowsize en stepsize - gly oor 'n paar byle twee oproepe (wat kom gratis as vereis daar is geen nagedagtenis bijgesteld) - het 'n onnodige kopie parameter wat verwyder kan word en vervang word deur die aanbring van. copy () na die oproep arrayforslidingwindow - skyfies oor die hele byle gelyktydig, is venster lengtes gegee as tuple parameter - neem 'n stepsize een in alle rigtings - stepsize nie gelyk aan een vereis sny van uitset data (onseker of dit impliseer kopiëring data) - Versper gly oor axisn vereis dat jy ingestel argument wshapen a. shapen dit beteken vir buigsame stepsize die volgende is ekwivalent (met 'n paar klein fout in slidingwindow daar) : 'n numpy. arange (10) Druk slidingwindow (a, size3, stepsize2) 'n numpy. arange (10) Druk arrayforslidingwindow (a, 3) :: 2. Stepsize 2 deur die val van elke 2de ry vir gly oor een as die volgende is ekwivalent (met 'n paar transponering): 'n numpy. arange (25).reshape (5, 5) Druk slidingwindow (a, size3, axis1) 'n numpy. arange ( 25).reshape (5, 5) Druk arrayforslidingwindow (a, (5, 3)) en vir gly oor twee as die volgende is ekwivalent: 'n numpy. arange (25).reshape (5, 5) Druk slidingwindow (slidingwindow ( 'n, size3, axis0), size2, axis1) 'n numpy. arange (25).reshape (5, 5) Druk arrayforslidingwindow (a, (3, 2)) Hierdie kwessie is oor vonkend gesprek oor - het ons so 'n funksie moet - Watter eienskappe word benodig - Watter koppelvlak moet ons te streef na bespreking Ek is bereid om op te stel 'n trek versoek met 'n uitvoering wat ons ooreengekom op. Jy ontvang hierdie omdat jy ingeskryf is op hierdie draad. Antwoord op hierdie e-pos direk, sien dit op GitHub lt7753 GT, of stom die draad ltgithub / kennisgewings / unsubscribe / ADMGdnU4Geecqxo3EP7gTFhkKQF8ovzeks5qMoU1gaJpZM4I4RX9 GT. - (/) (O. o) (GT lt) Este es CONEJO. Copia n CONEJO af tu firma y aydale af sus vliegtuie de dominacin Mundial. Die voorbeeld is natuurlik net gekies om die voorbeeld so klein as moontlik te hou. Ek is nie seker ek verstaan ​​waarom byna elke funksie op die top van wat sou dit ondoeltreffend wees. Nog 'n voorbeeld, die berekening van die spektrogram van 'n sein, waar die gly venster is gt2x vinniger as 'n for-lus (plus die gly venster implementering word makliker om te lees en ontfout): Dit is nie dieselfde as 'n voorbeeld, maar sê jy het 'n skikking met n items en jy wil FFT's van grootte m uit te voer op 'n gly venster daaroor. Die kompleksiteit van jou bedrywighede gaan O (n m log m). Maar, sodra jy die eerste FFT bereken, jy hoef nie al die berekeninge te doen. Sê x is jou oorspronklike skikking, en y die FFT vir 'n sekere gly venster, en Z vir die gly venster 'n stap van grootte een verdere. Afgesien van die veelvuldige af deur een foute ek waarskynlik maak, jy kan iets soos te doen: yk som (xi exp (-2 pi 1J ki / m vir i in die reeks (0, m)) ZK som (xi exp (-2 pi 1J k (i - 1) / m vir i in die reeks (1, m1)) ZK (yk - x0 xm exp (-2 pi 1J k)) exp (2 pi 1J k / m) en al van 'n skielike jy is die berekening van elke nuwe FFT betyds O (m) in plaas van O (m log m), wat beteken dat die algehele kompleksiteit van jou berekening is nou O (m (n teken m)), wat gaan 'n faktor log m vinniger as die naïef oplossing. jou helfte oorvleuel FFT's is eintlik die laaste stap van die FFT algoritme, was FFT's van grootte n bestaan ​​uit 2 FFT's van grootte n / 2, sodat 'n doeltreffende algoritme vir jou probleem sal wees. vir baie probleme op 'n gly venster is daar soortgelyke slim benaderings wat die berekeninge baie aansienlik vinniger maak. En die vrees is dat, deur die bevordering van die gebruik van 'n gly venster benadering, sal ons lei gebruikers op die pad van 'n maklike 2x speedup, eerder as om die wees gespesialiseerde 10x of 100x speedup. Jaime Op Dinsdag, 21 Junie 2016 by 13:15, Nils Werner. gt geskryf: Die voorbeeld is natuurlik net gekies om die voorbeeld so klein as moontlik te hou. Ek is nie seker ek verstaan ​​waarom byna elke funksie op die top van wat sou dit ondoeltreffend wees. Nog 'n voorbeeld, die berekening van die spektrogram van 'n sein, waar die gly venster is gt2x vinniger as 'n for-lus: invoer tyd invoer Numpy invoer scipy. signal invoer matplotlib. pyplot as PLT Winlen 256 stepsize Winlen // 2 siglen 44100 10 Die gebruik van gly venster begin time. clock () n numpy. sin (numpy. arange (siglen) 2 numpy. pi 16000 / 44.100,0) 'n slidingwindow (a, sizewinlen, stepsizestepsize) B numpy. fft. fft (a scipy. signal. windows. hamming (Winlen ), axis1) Print time. clock () - begin 0,037622 op my rekenaar gebruik van vir lus begin time. clock () n numpy. sin (numpy. arange (siglen) 2 numpy. pi 16000 / 44.100,0) idxlist reeks (0, Len (a) - winlen, stepsize) C numpy. zeros ((Len (idxlist), Winlen), dtypecomplex) vir o, ek in opsom (idxlist): Co numpy. fft. fft (ai: iwinlen scipy. signal. windows. hamming (Winlen)) Print time. clock () - begin 0,080116 op my rekenaar druk numpy. allclose (B, C) Ware plt. imshow (numpy. abs (B)) plt. figure () plt. imshow (Numpy. ABS (C)) plt. show () jy is die ontvangs, want jy kommentaar. Antwoord op hierdie e-pos direk, sien dit op GitHub lt7753 (kommentaar) GT, of stom die draad ltgithub / kennisgewings / unsubscribe / ADMGdr2DYofUpnyTLuOf-jQ9lpsU3Ldks5qN8fqgaJpZM4I4RX9 GT. - (/) (O. o) (GT lt) Este es CONEJO. Copia n CONEJO af tu firma y aydale af sus vliegtuie de dominacin Mundial. Ja, mag jy in staat wees om 'n oorvleueling FFT optimaliseer die manier. Weereens, ek praat nie van 'n spesifieke usecase hier. Dit pyn my om dit te sê, maar ek is op soek na dinge uit die snelle prototipe wetenskaplike kode kant van die saak. Ek het nog oor wetenskaplike kode wat eintlik nie so 'optimalisaties en nie die geval is net gaan af in die maklike deel en Vectorize pad te kom. Wanneer ek probeer 'n paar random idee ek moes ek stel nie belang in voortydig optimalisering my gelek bedrywighede, ek wil net dit redelik vinnig en onderhou vir so min koste as moontlik wees. A vir lus is vir my nie: Die kode is moeilik om te lees en dit sal stadig wees. Jou oplossing is vir my net een: Dit kan vinnig skree, maar is naby onmoontlik om vinnig Itereer op of in stand te hou deur nie-CS-ingenieurs of laat staan ​​studente. 'N gly venster implementering verwyder die meeste van die vir lusse en off-vir-een foute en terselfdertyd kan 'n redelike speedup voorsien. Wanneer dit gaan om die werklike produksie kode met meer onderhouers en toetse en 'n paar innerlike sirkelroetes gedoen in C jou implementering natuurlik maak meer sin. Ag geneem word dat beide Scipy en hul spektrogram verwante funksies matplotlib implementeer met behulp van presies hierdie benadering eerder as 'n meer doeltreffende benadering, dit lyk asof ons reeds op hierdie pad gegaan. Ek dink daar is twee probleme met die gebruik van meer doeltreffende benaderings. In die eerste plek is dit vereis verskillende benaderings vir enige berekening wat jy dalk wil om dit te doen. Tweedens, dit verg iemand om al hierdie spesiale gevalle eintlik implementeer. Ag geneem word dat selfs in die sogenaamde ooglopende geval met FFT niemand het optrek om dit te doen, nie die geval is dit blyk dat dit gebeur. Ek dink die eenvoudigste benadering sou nie soseer wees om spesiale funksies te skep vir elke berekening kan jy dalk nie, maar eerder 'n enkele funksie wat die lengte venster oorvleuel, 'n moontlike venster, en 'n funksie neem skep. Dit sou dan gebruik vordering na die korrekte vorm te skep, dan aansoek doen by die venster (indien enige), dan is die funksie toe te pas. matplotlib en Scipy is reeds besig met die eerste twee stappe, sodat dit maklik is om hul kode vertaal in 'n algemene funksie wat kan werk met 'n funksie wat 'n vektor neem sou wees. Om heeltemal oop wees, ek geïmplementeer die strided benadering in matplotlib, maar voordat dit weer met behulp van dieselfde algoritme geïmplementeer met behulp van 'n lus, so dit was 'n verbetering op wat voor bestaan. Hierdie funksie is ook herhaal scikit-beeld (viewaswindows) en in scikit-leer (extractpatches). Ook, as 'n nuwe gerief funksie onder numpy. lib. stridetricks sou leef ek dont dink gebruikers is meer aangemoedig om 'n so 'n benadering gebruik as wat hulle reeds Bewegende Gemiddeldes vir Onreëlmatige Tyd Reeks are. Exponential In tydreeksanalise daar is dikwels 'n behoefte aan glad funksies wat vinnig reageer op veranderinge in die sein. In die tipiese aansoek, kan jy die verwerking van 'n insetsein in real-time, en wil sulke dinge te bereken as die onlangse gemiddelde waarde, of kry 'n oombliklike helling daarvoor. Maar die werklike wêreld seine dikwels lawaaierige. 'N Paar lawaaierige monsters sal die huidige waarde van die sein te maak, of sy helling, wissel. Bewegende gemiddeldes Die eenvoudigste glad funksie is 'n met venster bewegende gemiddelde. Soos monsters kom in wat jy neem 'n gemiddeld van die mees onlangse N waardes. Dit sal glad spykers, maar stel 'n vertraging 8211 of latency. Jou gemiddelde sal altyd vertraag word deur die wydte van jou bewegende gemiddelde. Die voorbeeld hierbo is 'n relatief duur om te bereken. Vir elke monster moet jy Itereer oor die hele omvang van die venster. Maar daar is goedkoper maniere 8211 hou die som van al die monsters in die venster in 'n buffer, en pas die bedrag as nuwe monsters kom in: Nog 'n tipe van bewegende gemiddelde is die 8220weighted beweeg average8221 dat gewigte vir elke posisie in die monster venster. Voordat gemiddeld julle te vermenigvuldig elke monster deur die gewig van die venster posisie. Tegnies Dit word 'n 8220convolution8221. Een tipiese gewig funksie pas 'n klok kurwe om die monster venster. Dit gee 'n sein wat meer gestem om die middelpunt van die venster, en nog 'n bietjie verdraagsaam teenoor lawaaierige monsters. In finansiële ontleding gebruik jy dikwels 'n gewig funksie dat waardes onlangse monsters meer, om 'n bewegende gemiddelde wat nader spore onlangse monsters gee. Ouer monsters word progressief minder gewig. Dit verlaag ietwat die gevolge van latency, terwyl hy nog gee redelike goeie smoothing: Met 'n geweegde gemiddelde, jy altyd moet Itereer oor die hele venster grootte vir elke monster (tensy jy die toegelate gewigte om sekere funksies kan dwing). Die eksponensiële bewegende gemiddelde Nog 'n tipe van die gemiddelde is die eksponensiële bewegende gemiddelde, of EMO. Dit word dikwels gebruik waar latency is van kritieke belang, soos in reële tyd finansiële ontleding. In hierdie gemiddelde, die gewigte te verminder eksponensieel. Elke monster word gewaardeer sommige persent kleiner as die volgende mees onlangse voorbeeld. Met hierdie beperking kan jy die bewegende gemiddelde baie effektief te bereken. Waar Alpha is 'n konstante wat beskryf hoe die venster gewigte te verminder met verloop van tyd. Byvoorbeeld, as elke monster was wat gewig van 80 van die waarde van die vorige voorbeeld, sou jy alfa 0,2 stel. Die kleiner Alpha word hoe langer jou bewegende gemiddelde is. (Bv dit gladder, maar minder reaktief om nuwe monsters). Die gewigte vir 'n EMO met alpha0.20 Soos jy kan sien, want elke nuwe monster wat jy nodig het net om dit gemiddeld met die waarde van die vorige gemiddelde. So berekening is baie baie vinnig. In teorie alle vorige monsters bydra tot die huidige gemiddelde, maar hul bydrae word eksponensieel kleiner met verloop van tyd. Dit is 'n baie kragtige tegniek, en waarskynlik die beste as jy wil 'n bewegende gemiddelde wat vinnig reageer op nuwe monsters, het 'n goeie glad eienskappe en is vinnig om te bereken nie. Die kode is triviale: EMA vir Onreëlmatige Tydreekse die standaard EMO is fyn wanneer die sein gemonster op 'n gereelde tyd intervalle. Maar wat as jou monsters kom op ongereelde tussenposes Stel jou 'n deurlopende sein wat bemonster op ongereelde tussenposes. Dit is die gewone situasie in finansiële ontleding. In teorie is daar 'n kontinue funksie vir die waarde van enige finansiële instrument, maar jy kan net hierdie sein wanneer iemand werklik 'n handelsmerk voer proe. So jou datastroom bestaan ​​uit 'n waarde, plus die tyd wat dit is waargeneem. Een manier om dit te hanteer is om die onreëlmatige sein te omskep in 'n gereelde sein, deur interpol tussen waarnemings, en hermonstering. Maar dit verloor data, en dit weer stel latency. Dit is moontlik om 'n EMO vir 'n onreëlmatige tydreekse direk bereken: In hierdie funksie, slaag jy in die huidige monster van jou sein, en die vorige voorbeeld, en die bedrag van die tyd wat verloop het tussen die twee, en die vorige waarde wat deur hierdie funksie. Resultate So hoe goed werk dit te demonstreer I8217ve gegenereer 'n sinusgolf, dan gemonsterde dit op ongereelde tussenposes, en bekendgestel sowat 20 geraas. Dit is die sein sal lukraak wissel - 20 uit die oorspronklike 8220true8221 sinus sein. Hoe goed die onreëlmatige eksponensiële bewegende gemiddelde herstel die sein Die rooi lyn is die oorspronklike sinusgolf 8211 gemonsterde op ongereelde tussenposes. Die blou lyn is die sein by die geluid bygevoeg. Die blou lyn is die enigste sein die EMO sien. Die groen lyn is die reëlmatige EMO. Jy kan sien dit herstel die sein baie goed. is 'n bietjie lomp, maar wat kan jy verwag van so 'n lawaaierige bron sein Dit verskuif ongeveer 15 tot die reg, omdat die EMO doen stel sommige latency. Die gladder jy dit wil hê, hoe meer latency jy sal sien. Maar uit dit wat jy kan byvoorbeeld bereken 'n oombliklike helling vir 'n rumoerige onreëlmatige sein. Wat kan jy doen met daardie Hmm8230. hulpbronne:


No comments:

Post a Comment