Jeg har i hovedsak en rekke verdier som dette. Ovenstående matrise er oversimplified, jeg samler 1 verdi per millisekund i min ekte kode og jeg må behandle utdataene på en algoritme jeg skrev for å finne nærmeste topp før et tidspunkt logikken feiler fordi i mitt eksempel ovenfor er 0 36 den virkelige toppen, men min algoritme vil se bakover og se det siste tallet 0 25 som toppen, da det er en reduksjon til 0 24 før det. Målet er å ta disse verdiene og bruk en algoritme til dem som vil glatte dem ut litt, slik at jeg har mer lineære verdier, det vil si at resultatene mine skal være svingete, ikke ekgedy. Jeg har blitt fortalt å bruke et eksponentielt glidende gjennomsnittsfilter til mine verdier. Hvordan kan jeg gjør dette Det er veldig vanskelig for meg å lese matematiske ligninger. Jeg behandler mye bedre med kode. Hvordan behandler jeg verdier i mitt array, og bruker en eksponentiell glidende gjennomsnittlig beregning for å utjevne dem ut. Skrevet 8. februar 12 kl 20 27. For å beregne et eksponentielt glidende gjennomsnitt må du holde noen tilstand rundt og du trenger en innstillingsparameter Dette krever en liten klasse forutsatt at du bruker Java 5 eller nyere. Installer med nedbrytingsparameteren du vil ha, må innstille skal være mellom 0 og 1 og bruk deretter gjennomsnittlig for å filtrere. Når du leser en side på noen matematiske gjentagelse, alt du virkelig trenger å vite når du setter det i kode er at matematikere liker å skrive indekser i arrays og sekvenser med abonnementer. De har også noen andre notasjoner, men det hjelper ikke. EMA er ganske enkelt som du bare trenger å huske en gammel verdi ingen kompliserte statlige arrays required. answered 8 februar 12 på 20 42. TKKocheran Ganske mye Er det ikke bra når ting kan være enkelt Hvis du starter med en ny sekvens, får du en ny bruker. Legg merke til at de første begrepene i gjennomsnittlig sekvens vil hoppe rundt litt på grunn av grenseeffekter, men du får de med andre bevegelige gjennomsnitt også. En god fordel er imidlertid at du kan pakke den bevegelige gjennomsnittlige logikken inn i gjennombrukeren og eksperimentere uten å forstyrre t han hviler på programmet for mye Donal Fellows 9 februar 12 på 0 06. Jeg har det vanskelig å forstå dine spørsmål, men jeg vil prøve å svare uansett.1 Hvis algoritmen din fant 0 25 i stedet for 0 36, så er det feil Det er feil fordi det forutsetter en monotonisk økning eller reduksjon som alltid går opp eller alltid går ned, med mindre du gjennomsnittlig ALLE dine data, dine datapunkter --- som du presenterer dem --- er ikke-lineære Hvis du virkelig vil finne maksimum verdi mellom to poeng i tid, så skjær din rekkefølge fra tmin til tmax og finn maksimum for det subarray.2 Nå er begrepet bevegelige gjennomsnitt veldig enkle å forestille at jeg har følgende liste 1 4, 1 5, 1 4, 1 5, 1 5 Jeg kan glatte det ut ved å ta gjennomsnittet av to tall 1 45, 1 45, 1 45, 1 5 Legg merke til at det første tallet er gjennomsnittet av 1 5 og 1 4 sekund og første nummer den andre nye listen er gjennomsnittet av 1 4 og 1 5 tredje og andre gamle liste den tredje nye listen gjennomsnittet 1 5 og 1 4 fjerde og tredje, og så videre kunne jeg har gjort det perioden tre eller fire, eller n Legg merke til hvordan dataene er mye jevnere En god måte å se glidende gjennomsnitt på jobben, er å gå til Google Finance, velg et lager, prøv Tesla Motors ganske flyktige TSLA og klikk på technicals nederst på diagrammet Velg Moving Average med en gitt periode, og eksponentiell glidende gjennomsnitt for å sammenligne forskjellene deres. Eksponentielt glidende gjennomsnitt er bare en annen utbygging av dette, men veier de eldre dataene mindre enn de nye dataene, dette er en måte å forvirre utjevningen mot baksiden Vennligst les Wikipedia-oppføringen. Så dette er mer en kommentar enn et svar, men den lille kommentarboksen var bare for liten Lykke til. Hvis du har problemer med matematikken, kan du gå med et enkelt glidende gjennomsnitt i stedet for eksponentiell. Så utdataene du får vil være de siste x-vilkårene delt med x Ikke-testet pseudokode. Merk at du må håndtere start - og sluttdelene av dataene, siden du tydeligvis ikke kan t gjennomsnitts de siste 5 vilkårene når du er på ditt andre datapunkt. , den re er mer effektive måter å beregne denne bevegelige gjennomsnittlige summen på - eldste nyeste, men dette er for å få konseptet om hva som skjer over. ansvaret 8. februar 12 kl 20 41. Gjennomsnitt Enkel glidende gjennomsnitt. Gjennomsnitt Enkel glidende gjennomsnitt Du blir oppfordret til å løse denne oppgaven i henhold til oppgavebeskrivelsen, ved å bruke hvilket som helst språk du kan kjenne til det enkle glidende gjennomsnittet av en serie av tall. Opprett en stateful-funksjonsklasseeksempel som tar en periode og returnerer en rutine som tar et tall som argument og gir en enkel bevegelse gjennomsnittlig av sine argumenter så langt. En enkel glidende gjennomsnitt er en metode for å beregne et gjennomsnitt av en strøm av tall ved bare å gjennomsnitts de siste P-tallene fra strømmen, hvor P er kjent som perioden. Det kan implementeres ved å ringe en initialisering rutine med P som argument, IP, som da skal returnere en rutine som når det kalles med individuelle, etterfølgende medlemmer av en strøm av tall, beregner gjennomsnittet av opp til den siste P av dem, kan vi ringe dette SMA. Ordet stateful i oppgavebeskrivelsen refererer til behovet for SMA å huske visse opplysninger mellom samtaler til den. Perioden, P. An bestilt beholder med minst de siste P-numrene fra hver enkelt av sine individuelle samtaler. Statlig betyr også at etterfølgende anrop til jeg, initialisereren, skal returnere separate rutiner som ikke deler lagret tilstand, slik at de kan brukes på to uavhengige datastrømmer. Pseudo-kode for en implementering av SMA er. Denne versjonen bruker en vedvarende kø for å holde mest mulig Nylige p-verdier Hver funksjon som returneres fra init-moving-gjennomsnittet, har sin tilstand i et atom som holder en kø-verdi. Denne implementeringen bruker en sirkulær liste for å lagre tallene i vinduet ved begynnelsen av hver iterasjonspeker refererer til listecellen som holder verdien bare flyttes ut av vinduet og erstattes med den nettopp verdiene. Bruke en Closure edit. Currently denne sma kan ikke være nok fordi den tildeler en lukking i bunken. Noen rømningsanalyser kan fjerne h eap allocation. Using en struktur edit. This versjon unngår heap allokering av lukking holde data i stabelen rammen av hovedfunksjonen Samme output. To unngå at flytende punkt tilnærminger holde hoper opp og vokser, kunne koden utføre en periodisk sum på hele sirkulær kø-array. Denne implementeringen produserer to funksjonsobjekter delestatus Det er idiomatisk i E for å skille inn input fra utdata lese fra skrive i stedet for å kombinere dem i ett objekt. Strukturen er den samme som implementeringen av Standard Deviation E. elixir-programmet nedenfor genererer en anonym funksjon med en innebygd periode p, som brukes som perioden for det enkle glidende gjennomsnittet. Kjøringsfunksjonen leser numerisk inngang og sender den til den nyopprettede anonyme funksjonen, og deretter kontrollerer resultatet til STDOUT. Utgangen er vist nedenfor, med gjennomsnittet, etterfulgt av gruppert inngang, som danner grunnlaget for hvert bevegelige gjennomsnitt. Langt har nedleggelser, men uforanderlige variabler En løsning da jeg s for å bruke prosesser og en enkel melding som passerer basert API. Matrix-språk har rutiner for å beregne glidningsavstandene for en gitt sekvens av elementer. Det er mindre effektivt å sløyfe som i de følgende kommandoene. Kontinuerlig ber om en innføring I som legges til enden av en liste L1 L1 kan bli funnet ved å trykke på 2ND 1, og det finnes gjennomsnitt i List OPS. Press ON for å avslutte programmet. Funksjon som returnerer en liste som inneholder gjennomsnittlig data for det medfølgende argumentet. Program som returnerer en enkel verdi ved hver invocation. list er listen som er gjennomsnitt p pga perioden 5 returnerer den gjennomsnittlige listen. Eksempel 2 Bruke programmet movinav2 i, 5 - Initialisere glidende gjennomsnittlig beregning og definer periode på 5 movinav2 3, xx - nye data i liste verdi 3, og resultatet blir lagret på variabel x, og vises movinav2 4, xx - ny dataverdi 4, og det nye resultatet blir lagret på variabel x og vises 4 3 2.Beskrivelse av funksjonen movinavg variabel r - er resultatet gjennomsnittlig lis t som vil bli returnert variabel i - er indeksvariabelen, og det peker til slutten av underlisten listen er gjennomsnittlig variabel z - en hjelpesvariabel. Funksjonen bruker variabel i for å bestemme hvilke verdier av listen vil bli vurdert i neste gjennomsnittlig beregning Ved hver iterasjon peker variabel jeg på den siste verdien i listen som skal brukes i gjennomsnittlig beregning. Så vi trenger bare å finne ut hvilken vil være den første verdien i listen. Vi må vanligvis vurdere p elementene, så det første elementet vil være det som er indeksert av ip 1 Men på de første iterasjonene vil denne beregningen vanligvis være negativ, slik at følgende ligning vil unngå negative indekser maksimalt ip 1,1 eller, ordne ligningen, maks ip, 0 1 Men antall elementer på de første iterasjonene vil også være mindre, den riktige verdien vil være sluttindeks - begynn indeks 1 eller ordne ligningen, i - maks ip, 0 1 1 og deretter, i-max ip, 0 Variabel z har den vanlige verdien max ip, 0 slik begynnelsesindeksen vil vær z 1 og nummerfelementene vil være iz. mid liste, z 1, iz vil returnere listen over verdier som vil være gjennomsnittlig sum vil summe dem summen vil gjennomsnittlig dem og lagre resultatet på riktig sted i resultatlisten. fp1 oppretter en delvis applikasjon som fastsetter i dette tilfellet andre og tredje parametere. En enkel flytende gjennomsnittlig implementering i Java. Ved flere anledninger har jeg ønsket å beregne enkle beregninger i mine Java-programmer, for eksempel antall treff i timen eller feil i løpet av en tidsperiode Mens beregning enkle beregninger ikke er veldig vanskelig, er det bare ekstra arbeid, og jeg vil heller bruke den tiden på problemområdet. Jeg var overrasket over å ikke finne noen allment aksepterte løsninger for beregninger i Java. Jeg fant Metrics, men det virket litt for komplisert og ikke godt dokumentert - Alt jeg virkelig ønsket var å beregne et glidende gjennomsnitt jeg tenkte på problemet litt mer og bestemte meg for at det ikke var et vanskelig problem. Her er min løsning. Dette virker ved å skape en rekke vinduoppdateringsfrekvensstørrelse, setter en tråd tellingen til neste indeks i arrayet på oppdateringsfrekvensen. Tellingen for intervallet er ganske enkelt array i-array i 1, som er den siste tellingen minus den eldste tellingen i 10 minutter intervallet, er den eldste tellingen jeg 1, akkurat 10 minutter gammel. For å legge til et bevegelige gjennomsnitt for vår kode først trenger vi en teller ved hjelp av AtomicLong. Denne telleren skal økes basert på hendelsene du er interessert i databehandling, for eksempel POST-forespørsler om en REST service. Vi må gi implementeringen med tilgang til disken og det er oppnådd gjennom GetCount-grensesnittet Her vil jeg opprette et glidende gjennomsnitt med et 5 minutters vindu som oppdateres hvert sekund. Og for å få det nåværende gjennomsnittet kalles vi bare getAverage metode. En nøkkelimplementeringsdetalj er hvordan arraystørrelsen bestemmes ved å dele vinduet med oppdateringsfrekvensen. Så et stort vindu med en hyppig oppdateringsfrekvens kan forbruke en betydelig mengde minne. I dette eksempelet e-størrelsen er rimelig 300 Men hvis vi opprettet et 24-timers glidende gjennomsnitt med et intervall på 1 sekund, vil størrelsen være 86400 En mer fornuftig oppdateringsfrekvens for en 24-timers periode kan være hver 5-minutters arraystørrelse på 288. En annen vurdering av valg vinduet og oppdateringsfrekvensen er vinduet må deles med frekvensen. For eksempel er et 2-minutters vindu med en 6 sekunders oppdateringsfrekvens ok, men en 7 sekunders oppdateringsfrekvens er ikke, siden den ikke er delelig med 120 En ulovligArgumentException blir kastet hvis Oppdateringsfrekvensen for vindumodulen er ikke null. Denne implementeringen krever en tråd per bevegelige gjennomsnitt som ikke er veldig effektiv. En bedre løsning ville være å dele en tråd over mange gjennomsnitt. Oppdatering Jeg har oppdatert koden for å dele en tråd her. Sist, der s et innledende tilstandsproblem vi har ingen data for hele vinduet For eksempel hvis du har et 5 minutters vindu og bare 15 sekunder med data Denne implementeringen returnerer null til vi har 5 minutter med data En annen tilnærming er å anslå gjennomsnittet. Antag at vi har en telling på 10 på 30 sekunder. Da kan vi anslå gjennomsnittet som 40 i 2 minutter. Det er imidlertid risiko for betydelig feil ved å ekstrapolere ufullstendige data. For eksempel hvis vi hadde en utbrudd på 20 treffer i 2 sekunder, vi d anslår 1200 per 2 minutter, som med all sannsynlighet er langt unna.
No comments:
Post a Comment