Saturday, 21 October 2017

F # Moving Gjennomsnittet


Jeg bruker et dynamisk bevegelig vindu for å beregne enkel statistikk på en serie bestilt på datoen nøkkelen. Jeg vil kunne sette grensen på slutten av vinduet, for eksempel en timeseries med månedlig glidende gjennomsnitt, den månedlige avgjøres av a. men deedle-serien funksjonen bruker alltid begynnelsen som grensen. Derfor skaper den alltid en datapointserie fra den første datafasen for de neste n datapunktene n er bestemt av det morsomme over, jeg vil gjerne ha en datapointserie fra nte data og se bakover inn i fortiden. Jeg prøvde også å bruke først til å reversere serien, men deedle tror at serien, men i en omvendt rekkefølge, er ikke lenger bestilt. Er det jeg leter etter mulig. Hvis du ser på aggregeringslisten Funksjoner i dokumentene finner du et funksjonsaggregat som er en generalisering av alle vinduesfunksjonene og tar også en nøkkelvelger. Dette betyr at du kan gjøre noe slikt. Funksjonen tar 3 parametere, inkludert nøkkel s velger og en funksjon som får datasegment som har vinduet sammen med et flagg om det er komplett eller ufullstendig - f. eks. på slutten av windowing. Sadly fungerer dette ikke helt her, fordi det vil lage en serie med dupliserte nøkler og de som er ikke støttet av Deedle Vinduene på slutten av klumpen vil alle ende opp med samme dato, så du får dupliserte nøkler det faktisk kjører, men du kan ikke gjøre mye med serien. En stygg løsning er å huske den siste klokka s avslutte og returner manglende verdier når slutten begynner å gjenta. Jeg jobber fortsatt med å groke F-tingen - prøver å finne ut hvordan jeg tenker på F, i stedet for å oversette fra andre språk jeg vet. Jeg har nylig tenkt på de tilfellene der du ikke ha et 1 1 kart mellom før og etter tilfeller der faller ned. Et eksempel på dette er bevegelige gjennomsnitt, hvor vanligvis du vil ha len-n 1 resultater for en liste over lengde len når gjennomsnittlig over n elementer. For guruer ut der er dette en god måte å gjøre Det bruker køen knust fra Jomo Fisher. Kanskje en bedre måte ville være å implementere en MovingAverageQueue ved å arve fra Fifo. asked Nov 17 08 at 11 12. Jeg måtte deklarere det slik at MovingAverage ns seq float for å sette dette i en bruksmodul, vekk fra anropssiden, å plassere typesystemet Så vidt jeg kan fortelle, fungerer dette bare med flyter, på grunn av en begrensning av MSDN-krav, kan jeg erstatte det med å bruke dette på en int-sekvens, men det gir en annen feil Brian, kan du omformulere dette svar på arbeid i generiske sammenhenger, slik at den vil fungere med seq-of-any-arithmetic-type, uten typegodkjenning Warren Young Jun 27 13 på 19 04. Jeg bør påpeke at mitt behov for denne bevegelige gjennomsnittlige funksjonen er å få et kort vindu 30ish over en sekvens av heltall som er nesten alle i millioner, så jeg trenger ikke flytepunkt Selv et siffer til høyre for desimaltegnet er ikke praktisk bruk i min søknad Konvertere mine heltall til FP og Resultatet tilbake til int bare for å placere F-standardbiblioteket gjør det ikke t appellere Warren Young Jun 27 13 på 19 30. Hvis du bryr deg om ytelse, kan du beregne et glidende gjennomsnitt effektivt ved å bruke noe som dette, forutsatt at vi beregner et glidende gjennomsnitt over et 3-dagers vindu. Den harde delen om dette er holder på din forrige løpende total og nummer N-vinduet jeg kom opp med følgende kode. Denne versjonen er ikke så fin som Haskell-koden, men det bør unngå ytelsesproblemer knyttet til å omkomprimere vinduet ditt på hver runde. Det holder en løpende total og holder tidligere brukte tall i en kø, så det burde være veldig fort. Bare for moro skyld skrev jeg en enkel referanse. Hvis du bryr deg om ytelse og som elegant kode, så prøv. Bruk FSUnit vi kan teste det. Algoritmenes knep er den første summen de første n tallene og deretter opprettholde en løpende total ved å legge til hodet på vinduet og trekke av halen av vinduet. Skyvevinduet oppnås ved å lage en selv zip på sekvensen, men med det andre argumentet til zip avansert med t Han er i størrelsen på vinduet. På slutten av rørledningen deler vi bare kjørestrømmen ved vinduets størrelse. Merkeskanning er akkurat som brett, men gir hver versjon av staten til en sekvens. En enda mer elegant løsning, selv om det er mulig å oppnå resultat, er å gjør observasjonen at hvis vi nullstiller sekvensen, trenger vi ikke å beregne den opprinnelige summen. Det kan være et resultatstrekk på grunn av den andre indireksjonen som er relatert til innpakningen av de to sekvensene, men kanskje er det ikke signifikant avhengig av størrelsen på window. answered 31 aug 12 på 8 06.Towards Numerics Version 3. Numerikk er godt på vei mot neste store utgivelse, v3 0 En første forhåndsvisning alfa har allerede blitt presset til NuGet-galleriet, selv om det fortsatt er mye å gjøre Hvis du vil forstå litt bedre hvor vi er nå, hvor vi er på vei til og hvorfor, så les videre. Hvorfor en ny stor utgave. Vi bruker prinsippene for semantisk versjonering, noe som betyr at vi ikke skal bryte noen deler av det offentlige sur Bibliotekets ansikt, som er nesten alt i vårt tilfelle, under mindre utgivelser med 3-delers versjon. Dette sikrer at du enkelt kan oppgradere i mindre utgivelser uten andre tanker eller bryte noen av kodene dine. Uansett er det noen ganger virkelig en god grunn til å endre design, fordi det er måte å komplisere å bruke, inkonsekvent, fører til dårlig ytelse, eller bare ikke var veldig godt gjennomtenkt. Eller vi lærte bare hvordan å gjøre det på en mye bedre måte. Du har kanskje lagt merke til at noen medlemmer har blitt erklært forældet i løpet av de siste par mindre utgivelsene, med forslag til hvordan man gjør det i stedet, selv om den gamle implementeringen ble holdt intakt. Over tid var all den gamle koden en smerte å opprettholde, og bruk av biblioteket var mye mer komplisert enn trengte Så jeg bestemte meg for at det var på tide å endelig reparere de fleste av disse problemene og rydde opp. Vi flytter litt ost rundt i denne utgivelsen. Koden din vil bryte inn noen ganger. Men i alle tilfeller bør en fikse være lett hvis ikke trives ial Også en gang der vil vi igjen være bundet av semantisk versjonering for å holde biblioteket stabilt over alle fremtidige mindre utgivelser og dermed sannsynlig i årene som kommer. Også, vi kan fortsette å gi oppdateringer for den gamle v2-grenen om nødvendig for en stund. Likevel, jeg anbefaler på det sterkeste å oppgradere til v3 når tilgjengelig. Feedback er velkommen. En første forhåndsvisning v3 0 0-alpha1 har allerede blitt publisert til NuGet og jeg planlegger å gjøre minst to forhåndsvisningsutgaver før vi kommer til den første versjonen av v3 0 Vær så snill å ha en se på det og gi tilbakemelding - nå er det en unik mulighet for å bryte endringer. Overvåk på hva som har blitt gjort så langt. Namespace-forenklinger. Mer funksjonell design der det er hensiktsmessig. Kontroller at alt fungerer fint og føles innfødt i både C og F. Bruk felles kort navn hvis kjent i stedet for veldig lange fulle navn trigonometri. Linear Algebra Ved hjelp av generiske typer er den anbefalte måten nå sikker på at den fungerer bra IO-klassene for matrisvektor serialisering blir separate pakker Major refactoring av iterative solvers Fyllt noen manglende brikker, forskjellige forenklinger, mange andre endringer. Distribusjoner Major opprydding Direkte eksponering av distribusjoner fungerer pdf, cdf, etc Parameter Estimation. New avstandsfunksjoner. Overvåkning om hva som er planlagt å gjøre. Iterative løsere trenger mer arbeid Jeg vil også utforme dem slik at de kan itereres manuelt, på en enkel måte. Integrerte transformasjoner FFT osv. trenger stor refactoring. Backet av innfødt leverandør hvis mulig. Foresøker å bringe tilbake filtrering FIR, IIR, glidende gjennomsnitt etc. The Nåværende QR-dekomponeringsbasert kurvefitting er ineffektiv for store datasett, men fikseringen er faktisk ikke veldig komplisert. Undersøk og lag en inkonsekvens i Precision-klassen. Redundante null-kontroller. Detaljer om hva som er nytt i versjon 3 så langt. Drapping navnegrupper. Did du noensinne må åpne 10 forskjellige Numerics navnerom for å få alt du trenger Dette bør bli noe bedre i v3, som de statiske fasader som Integrere Interpolate F det eller FindRoots for enkle tilfeller har blitt flyttet direkte til rotenavnene, og alle algoritmer navneområder for avansert bruk av skjemaet er nå ganske enkelt. I tillegg til de forenklede navneområdene, den siste Differensiate overload som returnerer all interpolert verdi og den første og andre derivat på et tidspunkt x har blitt forenklet i stedet for to utparametere i en uventet rekkefølge, det returnerer nå en tuple med rimelig bestilling. Designet av den dobbelte eksponensielle transformasjonen var ganske merkelig. Det har blitt forenklet til en statisk klasse og er mye enklere å bruke eksplisitt. Probabilitetsfordelinger. Selv om det alltid var mulig å tilordne en tilpasset tilfeldig kilde-RNG til en distribusjon for tilfeldig antall prøvetaking, var det noe komplisert og krevde to trinn. Nå har alle distribusjonskonstruktører overbelastning ved å akseptere en tilpasset tilfeldig kilde direkte ved konstruksjon, i et enkelt trinn. Noen få distribusjoner støtter nå størst sannsynlighet for parameterestimering og mest distri butions implementere en invers kumulativ distribusjonsfunksjon Distribusjonsfunksjoner som PDF CDF og InvCDF blir nå eksponert direkte som statiske funksjoner. Inline dokumentasjon og parameter navngivning er forbedret betydelig ChiSquare ble ChiSquared og ID-distribusjonsgrensesnittet ble IUnivariateDistribution Simpler mer komposibelt tilfeldig prøvetaking i F med ny Eksempelmodul. Nyavstandsfunksjoner. Standardrutiner for evaluering av Euclid, Manhattan og Chebychev avstander mellom arrays eller vektorer, også for den vanlige summen av absolutt forskjell SAD, gjennomsnittlig absolutt feil MAE, summen av kvadrert forskjell SSD og gjennomsnittlig kvadratfeil MSE metrics Hamming avstand Leverandørleverandører der det er relevant. Ingen null sjekker og ArgumentNullExceptions. Likt som en bivirkning fra min eksponering for funksjonell programmering i løpet av det siste året, følger jeg ikke lenger argumentene hvorfor i C hver rutine må eksplisitt sjekke alle argumenter for null jeg allerede falt noen av disse kontrollene, men det er fortsatt mer enn 2000 steder hvor Numerics kaster en ArgumentNullException. De fleste av disse vil sannsynligvis være borte. Det er ett tilfelle hvor det er fornuftig å beholde dem selv når en rutine aksepterer et argument, men ikke bruker det umiddelbart og derfor ikke forårsaker en umiddelbar NullReferenceException, en nullreferanse som sniker seg inn, kan være vanskelig å feilsøke, så vi skal holde sjekken. Men slike tilfeller er ganske sjeldne gitt bibliotekets natur. IO-biblioteket som tidligere ble distribuert som en del av kjernepakken, er nå et sett med separate NuGet-pakker, for eksempel, og bor i et eget lager. Fornøyd generiske lineære algebra typer. Siden det generiske navneområdet var nødvendig hele tiden, og den anbefalte gledelige banen er nå å alltid bruke generiske typer, alt fra navneområdet har blitt flyttet ett navneområde Fra nå av trenger du vanligvis bare å åpne to navneområder når du arbeider med lineær algebra, selv om faktoriseringer trengs. For eksempel når du bruker dubbletten e type, du åpner og. Så siden skriving er sterkere i F, gir alle init-opprettingsfunksjonene i F-modulet nå direkte generiske typer, slik at du ikke må oppkast manuelt hele tiden. De fleste rutiner er generert for å arbeide med generiske typer. For tilfeller der du vil implementere generiske algoritmer, men også trenger å opprette nye tette eller sparsomme matriser eller vektorer, har en ny generisk byggmester blitt lagt til. Dette bør sjelden bli nødvendig i brukerkode skjønt. Feil i skalarmatrixrutiner. Noen få mangler skalar - matrise rutiner som å legge til eller subtrahere en skalar til en matrise eller dele en skalar av en matrise har blitt lagt til, støttet av leverandører der det er mulig. Det er nå også en modulus rutine. Point-wise infix operatører der støttet F. We ve lagt til punktvis og operatører til matriser og vektorer i kjernebiblioteket Dette støttes ikke på alle språk ennå, men fungerer fint i F, selv om det uten å currying støtte Selvfølgelig på de andre språkene kan du fortsette å bruke de vanlige metodene som befor e. Faktorisering og Iterative Solvers. Foreløpig var matrixfaktorisering bare tilgjengelig ved forlengelsesmetoder eller eksplisitt oppretting, som ikke fungerte veldig bra ved bruk av generiske typer. Den generiske matrittypen gir nå metoder for å lage dem direkte. Som sådan har de faktiske implementeringer blitt internalisert da det ikke lenger er behov for direkte tilgang. QR-faktorisering er nå tynn som standard, og faktoriseringer kloner ikke lenger resultatene deres uten praktisk grunn. Det iterative løsningsdesignet har blitt betydelig forenklet og er nå generisk og delt når det er mulig og aksepterer generiske typer overalt Navneområdene er nå mye mer flate, da den svært detaljerte strukturen ikke tilførte noen verdi, men betydde at du måtte åpne et dusin navneområder. Andre lineære algebraforbedringer. Vektorer har nå en ConjugateDotProduct-rutine i tillegg til DotProduct. Vectors gir nå eksplisitt riktig L1, L2 og uendelig norms. Matrices Vectors har nå konsistente tellere, med en variant tha t hopper nuller nyttig hvis sparsomme. Matrix Vector skapelsesrutiner er blitt forenklet og krever vanligvis ikke eksplisitte dimensjoner Nye varianter for å lage diagonale matriser eller lignende hvor alle felt har samme verdi. Matriser Vektorer avslører om lagringen er tett med en ny IsDense-egenskap . Providers har blitt flyttet til navnet på en leverandør og er helt generiske igjen. Mer robust komplekst Asin Acos for store reelle tall. Trinnfunksjoner vanlige korte navn i stedet for veldig lange namesplex vanlige korte navn for Exp, Ln, Log10, Log. Statistics nye single - pass MeanVariance-metoden som brukes ofte sammen. Del dette innlegget.

No comments:

Post a Comment