Friday 3 November 2017

Moving Gjennomsnittet Linq


For å oppnå en asymptotisk ytelse av O n som den håndkodede løsningen gjør, kan du bruke Aggregate-funksjonen som i. Den akkumulerte verdien implementert som anonym type inneholder to felter Resultatet inneholder resultatlisten oppbygget så langt Arbeid inneholder den siste periode 1-elementer Samlet funksjon legger til gjeldende verdi i arbeidslisten, bygger nåværende gjennomsnitt og legger det til resultatet og fjerner deretter den første dvs. eldste verdien fra arbeidslisten. Frøet, dvs. startverdien for akkumuleringen, er bygget ved å sette de første periode-1-elementene inn i Arbeide og initialisere Resultat til en tom liste. Følgelig starter aggregeringen med elementperiode ved å hoppe over periode-1 elementer i begynnelsen. I funksjonell programmering er dette et typisk bruksmønster for aggregerings - eller brettfunksjonen , btw. Løsningen er ikke funksjonelt ren fordi de samme listobjektene Arbeider og Resultat blir gjenbrukt i hvert trinn Jeg er ikke sikker på om det kan føre til problemer dersom det er meg fremtidige kompilatorer forsøker å parallellisere Aggregate-funksjonen automatisk, men jeg er heller ikke sikker på om det er mulig. En ren funksjonell løsning bør skape nye lister ved hvert trinn. Merk også at C mangler kraftige listuttrykk I noen hypotetiske Python - C-blandet pseudokode man kunne skrive aggregeringsfunksjonen som. Som ville være litt mer elegant i min ydmyke mening. Noter kjøretiden til O n 2 siden du trenger å hoppe over flere og flere elementer i hvert trinn og avaik Hopp jeg har å ringe i tider Se svaret mitt for en løsning i løpet av tiden jeg bare la merke til OP-kommentaren nedenfor at han muligens vil få verdiene fra en SQL DB i fremtiden. I dette tilfellet vil jeg sterkt fraråte denne løsningen MartinStettner Mar 3 11 på 0 53. For den mest effektive måten å beregne et flytende gjennomsnitt med LINQ, bør du ikke bruke LINQ. I stedet foreslår jeg å opprette en hjelperklasse som beregner et bevegelig gjennomsnitt på den mest effektive måten å bruke ac ircular buffer og causal moving average filter, deretter en forlengelsesmetode for å gjøre den tilgjengelig for LINQ. First up, det bevegelige gjennomsnittet. Denne klassen gir en veldig rask og lett implementering av et MovingAverage-filter. Det lager en sirkulær buffer av lengde N og beregner en legg til, en trekke ned og en multipliser per datapunkt vedlagt, i motsetning til N multipliser-adds per punkt for brute force implementation. De over utvidede metodene pakker inn MovingAverage-klassen og tillater innføring i en IEnumerable stream. For å gjøre dette i en mer funksjonell måte, du trenger en skannemetode som eksisterer i Rx, men ikke i LINQ. Vi ser hvordan det ville se ut hvis vi hadde en skannemetode. Og her er skannemetoden tatt og justert herfra. Dette burde har bedre ytelse enn brute force-metoden siden vi bruker en løpende sum for å beregne SMA. For å starte må vi beregne den første perioden som vi kaller frø her. Da beregner vi hver etterfølgende verdi fra akkumulert frø av lue For å gjøre det trenger vi den gamle verdien som er t-delta og den nyeste verdien som vi zip sammen serien, en gang fra begynnelsen og en gang skiftet av deltaet. Til slutt gjør vi noe opprydding ved å legge nuller for lengden av den første perioden og legge til den opprinnelige frøverdien. Ansatt juni 19 13 på 22 58. Målet mitt er å få et veid gjennomsnitt fra ett bord, basert på en annen tabell primærnøkkel. Jeg må få et vektet gjennomsnitt basert på lengden på et segment og jeg må ignorere verdier av -1 Jeg vet hvordan dette gjøres i SQL, men målet mitt er å gjøre dette i LINQ Det ser noe ut i SQL. Jeg er fortsatt ganske ny til LINQ, og har det vanskelig finne ut hvordan jeg ville oversette dette Resultatvektet gjennomsnitt skulle komme ut til omtrent 55 3 Takk. Skrevet 26. april 10 på 15. 23.Jeg gjør dette nok til at jeg opprettet en forlengelsesmetode for LINQ. Etter at du har fått din delmengde av data, samtale ser slik ut. Dette har blitt ekstremt praktisk fordi jeg kan få et veid gjennomsnitt av en hvilken som helst gruppe data ba sed på et annet felt i samme post. Jeg kontrollerer nå for å dividere med null og kaste et mer detaljert unntak i stedet for å returnere 0 Tillater brukeren å fange unntaket og håndtere etter behov. Jeg har en 4000 mengde data på lager og tring å beregne det glidende gjennomsnittet for alle dataverdier, men siden det bevegelige gjennomsnittet er basert på tidligere data, og jeg kan ikke beregne 15-dagers SMA i de første 14 dagene, hopper over de første 14 dagene og beregner SMA på resten av dataene Og det er det å bruke LINQ å oppnå Kan noen gi en prøve eller en hint om hvordan du bruker LINQ til å beregne glidende gjennomsnitt Utgangen for gjennomsnittsverdiene er rundt 500 si, virkelig forstår ikke hvordan det er mulig å få den høye verdien. med summen array.06 07 2012 562 49 571 72.06 08 2012 565 84 580 32.06 11 2012 568 56 571 17.06 12 2012 569 55 576 16.06 13 2012 570 56 572 16.06 14 2012 570 63 571 53.06 15 2012 571 21 574 13.06 18 2012 572 78 585 78.06 19 2012 573 79 587 41.06 20 2012 574 23 585 74.06 21 2012 574 22 577 67.06 22 2012 575 63 582 10.06 25 2012 576 06 570 77.06 26 2012 576 68 572 03.06 27 2012 576 88 574 50.06 28 2012 576 7 569 05.06 29 2012 576 95 584 00.07 02 2012 578 37 592 52.07 03 2012 579 92 599 41.07 03 2012 581 74 599 41.Edited av Leemx Fredag ​​16. november 2012 2 59 AM. Moved by Lisa Zhu Microsoft kontingentpersonale Mandag 19. november 2012 7 38 AM Linq relatert Fra Visual C General. Friday , 16. november 2012 2 42 AM. Til å skape et bevegelige gjennomsnitt, ville jeg begynne med å skape et område fra 0 til lengden av datalisten - lengden på bevegelige perioden, deretter for hver verdi i rekkevidden velg elementer x til x lengde på bevegelse periode og beregne gjennomsnittet. Alt i en fin LINQ-setning. Merk at dette ikke er ekstremt effektivt, siden du i utgangspunktet lytter over datalisten for hver verdi i serien. Hei, se Dette systemet tillater signaturer på mer enn 60 cha. Edited av Arno Brouwer fredag ​​23. november 2012 4 42 PM. Markert som svar av Alexander Sun fredag, desember 0 7, 2012 2 44 AM. Friday, 23. november 2012 4 41.Alle svar. En prøve av din LINQ-setning ville hjelpe. Fremragende optimalisering er roten til alt ondt - Knuth. For å skape et glidende gjennomsnitt, ville jeg begynne med opprette et område fra 0 til lengden av datalisten - lengden på flytteperioden, deretter for hver verdi i rekkevidden velg elementene x til x lengden på bevegelighetsperioden og beregne gjennomsnittet. Alt i en fin LINQ-setning. Merk at dette ikke er ekstremt Effektiv, siden du i utgangspunktet gjenspeiler datalisten for hver verdi i serien. Hey, look Dette systemet gir signaturer på mer enn 60 cha. Edited av Arno Brouwer fredag ​​23. november 2012 4 42 PM. Markert som svar fra Alexander Sun Fredag ​​07 desember 2012 2 44 AM. Friday 23. november 2012 kl. 16.00.Microsoft gjennomfører en online-undersøkelse for å forstå din mening på Msdn-nettsiden. Hvis du velger å delta, vil onlineundersøkelsen bli presentert for deg når du forlater Msdn-nettsiden. Vil du delta. Hjelp oss å forbedre MSDN. Visit vår UserVoice Page å sende inn og stemme på ideer. Dvs sentre. Lære ressurser.

No comments:

Post a Comment