Monday 23 October 2017

Numpy Slør Eksponentiell Moving Average


Hmmm, det virker som om dette er lett å implementere funksjonen er faktisk ganske enkelt å få feil og har fremmet en god diskusjon om minneeffektivitet. Jeg er glad for å ha oppblåst hvis det betyr å vite at noe er gjort riktig. Richard Sep 20 14 på 19 23.NumPy s mangel på en bestemt domenespesifikk funksjon er kanskje på grunn av Core Team s disiplin og troskap til NumPy s hoveddirektiv gi en N-dimensjonal array type samt funksjoner for å lage og indeksere disse arrays Like mange grunnleggende mål, denne er ikke liten, og NumPy gjør det glimrende. Den mye større SciPy inneholder en mye større samling av domenespesifikke biblioteker kalt subpackages av SciPy devs - for eksempel numerisk optimalisering optimalisere signal signalering og integral kalkulator integrere. Min gjetning er at funksjonen du er ute etter, er i minst en av SciPy-subpackagene kanskje, men jeg vil se først ut i samlingen av SciPy-scikits, identifisere de relevante scikitene og se etter Funksjonen av interesse there. Scikits er uavhengige utviklede pakker basert på NumPy SciPy og rettet mot en bestemt teknisk disiplin, for eksempel scikits-image scikits-learn osv. Flere av disse var spesielt den fantastiske OpenOpt for numerisk optimalisering var høyt ansett, modne prosjekter lange før du velger å bo under de relativt nye scikits rubricene The Scikits hjemmeside likte å overliste omtrent 30 slike scikits selv om minst flere av disse ikke lenger er under aktiv utvikling. Etter dette rådene vil du lede til scikits-timeseries, men den pakken er nei lengre under aktiv utvikling Pandas er faktisk blitt AFAIK, de facto NumPy-baserte tidsserienbiblioteket. Pandas har flere funksjoner som kan brukes til å beregne et bevegelige gjennomsnittsgrunnlag. Det enkleste av disse er trolig rollingmean som du bruker som så. Nå , bare ring funksjonen rollingmean passerer i Serie objektet og en vindu størrelse som i mitt eksempel nedenfor er 10 days. verify at det w orked - for eksempel sammenliknet verdier 10-15 i den opprinnelige serien versus den nye serien glattet med rullende middel. Funksjonen rullende men sammen med omtrent et dusin eller annen funksjon er informelt gruppert i Pandas dokumentasjonen under rubrikkens flyttingsvindu fungerer en sekund relatert gruppe av funksjoner i Pandas refereres til som eksponentielt vektede funksjoner, f. eks. ewma som beregner eksponentielt flytende vektet gjennomsnitt. Det faktum at denne andre gruppen ikke er inkludert i de første bevegelige vindusfunksjonene, er kanskje fordi de eksponentielt vektede transformasjonene ikke stole på en fast lengde window. answered Jan 14 13 på 6 38.tekniske indikatorer 0 0 16.Denne modulen gir noen tekniske indikatorer for analyse av lager. Denne modulen gir noen tekniske indikatorer for analyse av lager. Når jeg kan, vil jeg legge til flere. Hvis noen ønsker å bidra med nye forslag til kode eller rettelser, føl deg fri. Relativ styrkeindeks RSI, ROC, MA konvolutter Enkelt Flytende Gjennomsnittlig SMA, Vektet Movi ng Gjennomsnittlig WMA, eksponentiell flytende gjennomsnittlig EMA Bollinger Bands BB, Bollinger Bandwidth, B. Det krever numpy. Denne modulen ble gjort og testet under Windows med Python 2 7 3 og numpy 1 6 1.Jeg vet at dette er et gammelt spørsmål, men her er en løsning som ikke bruker noen ekstra datastrukturer eller biblioteker. Det er lineært i antall elementer i inngangslisten, og jeg kan ikke tenke på noen annen måte å gjøre det mer effektivt, faktisk hvis noen vet om en bedre måte å tildele resultatet , vennligst gi meg beskjed. Not dette ville være mye raskere ved hjelp av en numpy array i stedet for en liste, men jeg ønsket å eliminere alle avhengigheter. Det ville også være mulig å forbedre ytelsen ved multi-threaded execution. Funksjonen forutsetter at inngangslisten er dimensjonal, så vær forsiktig. Du kan beregne et løpende middel med. Heldigvis inneholder numpy en convolve-funksjon som vi kan bruke for å øke hastigheten. Det løpende gjennomsnittet er ekvivalent med å inkludere x med en vektor som er N lang, med alle medlemmer like til 1 N Th En numpy implementering av convolve inkluderer startoverskridende, så du må fjerne de første N-1 poengene. På min maskin er den raske versjonen 20-30 ganger raskere, avhengig av lengden på inngangsvektoren og størrelsen på gjennomsnittsvinduet . Merk at convolve innebærer en samme modus som virker som om den burde adressere det begynnende forbigående problemet, men det splitter det mellom begynnelsen og slutten. Den fjerner forbigående fra slutten, og begynnelsen har ikke en Vel, jeg antar det Det er sans for prioriteringer, jeg trenger ikke det samme antall resultater på bekostning av å få en skråning mot null som ikke er der i dataene BTW, her er en kommando for å vise forskjellen mellom modusmodi full, samme, gyldig tomt convolve de 200,, de 50, 50, modus m for m i moduser akse -10, 251, - 1, 1 1 legemodus, lok lavere senter med pyplot og numpy importert lapis Mar 24 14 på 13 56.pandas er mer egnet for dette enn NumPy eller SciPy Dens funksjon rollingmean gjør jobben beleilig Det returnerer også et NumPy-array når innspillet er en array. It er vanskelig å slå rollingmean i ytelse med noen tilpasset ren Python-implementering. Her er et eksempel ytelse mot to av de foreslåtte løsningene. Det er også gode alternativer for hvordan man skal håndtere kanten verdier. Jeg er alltid irritert av signalbehandling funksjon som returnerer utgangssignaler av forskjellig form enn inngangssignaler når både innganger og utganger er av samme natur, for eksempel begge tidsmessige signaler. Det bryter korrespondansen med relatert uavhengig variabel, for eksempel tid, frekvensfremstilling plotting eller sammenligning er ikke en direkte sak uansett, men hvis du deler følelsen, vil du kanskje endre de siste linjene i den foreslåtte funksjonen som samme retur. windowlen-1 - windowlen-1 Christian O Reilly 25 aug på 19 56. En bit sent til festen, men jeg har laget min egen lille funksjon som ikke vikler rundt endene eller pads med nuller som deretter brukes til å finne gjennomsnittet. Som en videre behandling er det også - sampler signalet ved lineært avstandspunkter. Tilpass koden på vilkårlig måte for å få andre funksjoner. Metoden er en enkel matrisemultiplikasjon med en normalisert gausskjerne. En enkel bruk på et sinusformet signal med tilsatt normal distribuert støy. Dette spørsmålet er nå enda eldre enn når NeXuS skrev om det i forrige måned, men jeg liker hvordan koden hans håndterer kantsaker. Men fordi det er et enkelt glidende gjennomsnitt, går det s resultatene bak dataene de søker. Jeg trodde at det handlet om kantsaker i en mer tilfredsstillende vei enn NumPy s moduser som er gyldige samme og fulle kan oppnås ved å bruke en lignende tilnærming til en konvoluttbasert metode. Mitt bidrag bruker et sentralt løpende gjennomsnitt for å justere resultatene med deres data. Når det er to få poeng tilgjengelig for vinduet i full størrelse For å bli brukt blir løpende gjennomsnitt beregnet fra suksessivt mindre vinduer ved kantene av arrayet Egentlig fra suksessivt større vinduer, men det er en implementeringsdetalj. Det er relativt sakte b fordi det bruker convolve og kan sannsynligvis bli spruced opp ganske mye av en ekte Pythonista, men jeg tror at ideen står. Ansatt Jan 2 på 0 28. Det er fint, men sakte når vinduets bredde blir stor. Noen svar gir mer effektive algoritmer med, men synes ikke å håndtere kantsverdier, selv har jeg implementert en algoritme som kan håndtere dette problemet godt, hvis dette problemet er erklært som. Input parameter mergenum kan betraktes som 2 windowwidth 1. Jeg vet at denne koden er litt ulæselig hvis du finn det nyttig og vil ha noen utvidelser, vennligst gi meg beskjed, og jeg vil oppdatere dette svaret Siden skriving kan en forklaring koste meg mye tid, jeg håper jeg bare gjør det når noen trenger det. Vennligst tilgi meg for min latskap. Hvis bare du er interessert i sin opprinnelige versjon. Det er enda mer uleselig, den første løsningen blir kvitt kantenproblemet ved å putte nuller rundt arrayet, men den andre løsningen som er lagt ut her, håndterer den på en tøff og direkte måte. I min siste setning forsøkte jeg å indikerehvorfor det hjelper flytende punktfeil Hvis to verdier er omtrent samme størrelsesorden, legger du til mindre presisjon enn hvis du la et veldig stort tall til en veldig liten kode. Koden kombinerer tilstøtende verdier på en slik måte at selv mellomliggende beløp alltid skal være rimelig tett i størrelsesorden for å minimere svingningsfeilen. Ingenting er dumt bevis, men denne metoden har lagret et par svært dårlig implementerte prosjekter i produksjon. Mayur Patel 15. desember kl. 17 22. Alleo I stedet for å gjøre ett tillegg per verdi, vil du være gjør to. Beviset er det samme som bit-flipping problemet. Poenget med dette svaret er imidlertid ikke nødvendigvis ytelse, men presisjon Minnebruk for gjennomsnittlige 64-biters verdier vil ikke overstige 64 elementer i hurtigbufferen, så det er vennlig i minnet bruk også Mayur Patel Des 29 14 på 17 04.

No comments:

Post a Comment