Wednesday 22 November 2017

Fsharp Bevegelse Gjennomsnittet


Hvis du absolutt vil ha et bibliotek, kan du se på dette spørsmålet eller se etter andre spørsmål om statistikkbiblioteker på. Her er en implementering av quickselect. Det har ventet tid O n og worst-case-tid. O n 2 Den eneste begrensningen på typen er at de er sammenlignbare. Jeg brukte fortsettelser for å gjøre det hale-rekursive Jeg prøvde å skrive samtalene på en slik måte at det ligner en enkel rekursiv samtale I stedet for å la x, yfab kroppen jeg brukte veldig morsomt xy-kropp. Det kunne forenkles en lite med CPS monad. Jeg jobber fortsatt med å feste F-tingen - prøver å finne ut hvordan man tenker på F, i stedet for å oversette fra andre språk, vet jeg. Jeg har nylig tenkt på tilfellene der du ikke har en 1 1 kart mellom før og etter tilfeller der faller ned. Et eksempel på dette er flytte gjennomsnitt, hvor vanligvis du vil ha len-n 1 resultater for en liste over lengde len når gjennomsnittlig over n elementer. For guruer der ute, er dette en God måte å gjøre det ved hjelp av køen knust fra Jomo F er henne. 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 kl 8 06. Tomas Petricek. Søker etter nye måter å tenke på i programmering med data. Jeg tror at det mest interessante arbeidet ikke er den som løser vanskelige problemer, men den som forandrer hvordan vi tenker på verden Jeg følger denne troen på arbeidet med datavitenskapsverktøy, funksjonell programmering og F-undervisning, i min programmeringsspråkforskning, og jeg prøver å forstå det gjennom vitenskapsfilosofi. Jeg jobber med å lage datadrevet historiefortelling Ier, mer åpen og reproduserbar på Alan Turing Institute. Jeg er forfatter av definitive F bøker og open-soruce biblioteker. Jeg tilbyr mine F trening og konsulenttjenester som en del av fsharpWorks. Jeg publiserte papirer om teori om kontekstbevisste programmeringsspråk, type leverandører, men også filosofi for science. New funksjoner og forbedringer i Deedle v1 0.As Howard Mansell allerede annonsert på BlueMountain Tech bloggen, har vi offisielt gitt ut 1 0-versjonen av Deedle Hvis du ikke har hørt om Deedle ennå, er det en bibliotek for interaktiv dataanalyse og leting Deedle fungerer bra med både C og F Det gir to hoveddatastruktur-serier for å jobbe med data og tidsserier og rammer for å jobbe med samlinger av serier, tenk CSV-filer, datatabeller etc. Den gode tingen om Deedle er at det har blitt et grunnleggende bibliotek som gjør det mulig å integrere et bredt spekter av ulike datavitenskapskomponenter. For eksempel fungerer R-typen leverandøren godt med Deedle a og det gjør vi også F Charting Vi har også jobbet med å integrere alle disse i en enkelt pakke kalt FsLab, men mer om den neste gangen. I dette blogginnlegget vil jeg se på et par nye funksjoner i Deedle og tilsvarende R type leverandør utgivelse Howard s kunngjøring har en mer detaljert liste, men jeg vil bare gi et par eksempler og kort kommentere ytelse improvemens vi gjorde. Hva er nytt i Deedle. Perhaps den mest synlige forskjellen i den nye versjonen er at mange av de funksjoner blir omdøpt Vi trodde at før v1 0 hadde vi en unik sjanse til å få navngivingen riktig, så vi gjorde mange omdreininger for å sikre at alt var konsistent. For eksempel brukte noen funksjoner serier og noen kolonne noen brukte sorter og andre rekkefølgen og så videre Dette bør nå renses opp På samme måte har vi løst en rekke feilmatcher mellom Serie og Ramme-moduler. Tilførsler til Deedle API. Aside fra å gi nytt navn, har vi også lagt til et par nyttige funksjoner. ompares survival ration for ulike passasjer klasser Dette kan nå gjøres enda enklere ved hjelp av PivotTable. Operasjonen grupperer radene i henhold til de to tastene og utfører deretter aggregering ved hjelp av den angitte funksjonen her Dette er en vanlig operasjon, og vi ønsket å gjøre det som enkelt som mulig Vi fortsetter å avsløre operasjoner både som F-funksjoner i moduler og som C-vennlig metoder. Et annet eksempel der vi gjorde mange forbedringer, er statistikk. Den første forbedringen er at du nå kan angi nøkkel kolonne når du laster inn data fra en CSV fil igjen, dette er veldig vanlig. Den samme funksjonen er tilgjengelig når du laster inn data fra en sekvens av objekter som brukes. Den neste nye tingen er statistikkmodulen Dette er det nye stedet for alle funksjoner knyttet til statistikk og numeriske beregninger Vi fant ut at flere funksjoner legges til til serie - og rammemoduler var litt forvirrende, så vi flyttet alle statistiske funksjoner på ett sted. Det er enda viktigere nå at vi har lagt til flere funksjoner kurto sis, skewness, variance og vi har lagt til flere måter å beregne dem på, flytte og utvide windows. For mer informasjon, se ramme - og seriestatistikksiden. Godkjent dokumentasjon. Til slutt er en av de sterke punktene i Deedle at den har en utmerket dokumentasjon. Dette er nå enda mer tilfelle fordi vi polerte dokumentasjonen automatisk generert fra Markdown-kommentarer i kildekoden Spesielt for de tre kjernemodulene. Serie-modulen gir funksjoner for å arbeide med individuelle dataserier og tidsserier. Dette inkluderer operasjoner som prøvetaking, transformasjoner, datatilgang og mer. Frame-modul gir funksjoner som ligner de i seriemodulen, men opererer på hele datarammer. Du kan transformere, justere og delta i rammer, utføre ulike reindekseringsoperasjoner etc. Statens modul implementerer standard statistiske funksjoner gjennomsnitt, varians, kurtosis, skewness, etc over serie, flytte vinduer, utvide vinduer og mye mer Modulen inneholder func for både serier og rammer. Hva er nytt i R-leverandøren. Sammen med en ny versjon av Deedle, oppdaterte vi også R-type leverandøren. Det er et par forbedringer som gjør det mye bedre. Installasjonen fra NuGet gjør ingen lengre stole på PowerShell installasjonsskript, så det kan fungere på Mono og når du bruker Gjenopprett pakker-funksjonen. Typeleverandøren kommuniserer med R via en egen prosess, slik at den er mer stabil og det vil også la oss ringe 64-biters versjon av R. These er tekniske, men svært viktige forbedringer. Vi har også lagt til en fin ny funksjon som gjør det enda enklere å blande R og F. RData type leverandør. I R kan du lagre arbeidsområder miljøer i filer. Dette er nyttig hvis du vil arkivere resultater av noen interaktiv analyse gjort i R-miljøet. Men det ville ikke vært fint hvis du kunne gjøre noen dataanalyse i R og deretter lagre dataene til en fil og laste den lett fra F på en sikker måte. Dette er akkurat det du får med RData type leverandøren Le ts si at jeg har en fil som inneholder mtcars datasettet lagret under navnet biler sammen med en liste mpg og en verdi mpgMean jeg kan skrive. Hvis du ser på typene, vil du se det er av typen float og er av typen Ramme streng , strengen R-leverandøren bruker de installerte pluginene som Deedle-plugin for å finne den mest hensiktsmessige F-typen for å eksponere dataene, og så blir R-datarammen automatisk eksponert som Deedle-ramme. Dette lar oss raskt gruppere verdiene med syl nummer sylindere og deretter beregne gjennomsnittlig miles per gallon mpg for hver av gruppene. Ved hjelp av F Charting ser resultatet slik ut. Resultatet forbedres. I denne versjonen av Deedle brukte vi litt tid på å forbedre ytelsen. Den første versjonen ble designet med ytelse i tankene og internene gjør det mulig å implementere operasjoner effektivt, f. eks. i F, det er ganske enkelt å skrive kode slik at dataene lagres i kontinuerlige minneblokker. Det var imidlertid en rekke steder hvor noen Deedle funksjonen brukte bare den enkleste dumme måten å få ting gjort på. Dette var fint, fordi det la oss raskt bygge en sofistikert og brukervennlig API, men det var tilfeller der ting bare var for sakte. Derfor er forbedret ytelse en kontinuerlig innsats, og hvis du finner et brukstilfelle hvor Deedle er sakte, vennligst send et problem. Måler ytelse. For å sikre at vi kan overvåke ytelsen, opprettet jeg et ganske enkelt verktøy som lar oss måle ytelsen automatisk. Dette er for øyeblikket tilgjengelig i min avdeling. Verktøyet er startet via et FAKE-skript og det måler ytelsen til alle tester i en spesifisert fil. Tester fungerer også som enhetstester. For eksempel. PerfTest-attributtet angir at funksjonen er en ytelsestest, og den lar oss også spesifisere antall iterasjoner slik at vi løper raske tester gjentatte ganger, men treg tester bare noen få ganger. Utrolig ytelse. Jeg gjorde to enkle analyser av ytelsen. Det første diagrammet sammenligner den nye versjonen av Deedle med den forrige versjonen som er tilgjengelig. på NuGet. Tallene representerer totalt antall millisekunder som trengs for å kjøre testen. Merk at X-aksen er begrenset til 10 sekunder, men noen av testene tar lengre tid med den gamle versjonen. Noen tester har bare verdi når du bruker den nye versjonen - dette er fordi de bruker funksjonen som er ny i v1 0. Et par poeng som er verdt å nevne. Noen av de bemerkelsesverdige forbedringene er når man slår sammen serier - dette gjelder også å bli med i rammer, f. eks. ved bruk av numeriske operasjoner. Vi har også lagt overbelastning av Slå sammen rammer som kan slå sammen flere serier samtidig, noe som er betydelig raskere, og lar deg slå sammen f. eks. 1000 rammer, som tidligere var for sakte. Det er en rekke forbedringer i Resample-operasjoner Igjen er dette bare et eksempel på en mer generell fart det påvirker også vinduer og chunking funksjoner. Relativ ytelse. I det forrige diagrammet er det litt vanskelig å se hva som er den største ytelsesforbedringen. I det følgende diagrammet blir testene skalert slik at ytelsen ved hjelp av originalversjon 0 9 12 blir brukt som 100 og ytelsen som bruker den nye versjonen, vises som en prosentandel, slik at 10sek ned til 5s viser som 50. I tillegg kan du se en rekke interessante ting. Den største hastigheten er på Å få tilgang til float-serien via objektserier Dette er tilfellet når du åpner en kolonne på en ramme som bruker som returnerer en serie ObjectSeries K-verdier. Fordi vi ikke vet typen av individuelle kolonner, returnerer vi dem som serier som inneholder obj-verdier. ny versjon, er dette ikke faktisk boksen verdiene, og så konvertere serien tilbake til serie K, float er i hovedsak ikke-opp. Vi har også gjort noe arbeid med å forbedre gruppering og relaterte operasjoner, for eksempel er hjemmeseksemplet nå om lag to ganger så fort Det er fortsatt mye rom for forbedring, men som du ser, jobber vi hardt med dette. Sammenslåingen og sammenslåingen er omtrent 6x raskere, men for Merge er dette enda viktigere når du slår sammen flere rammer. De tester som jeg inkluderte her, er på ingen måte omfattende. De representerer bare et par testtilfeller som jeg jobbet med. Men med ytelsesmålingene på plass, bør vi kunne bruke dette oftere. Så, hvis du har en interessant bruk tilfelle, send inn en trekkforespørsel ved å legge til en ytelsestest. 1 0 utgivelsen av Deedle er en viktig milepæl Selv om Deedle har eksistert siden november, og den har blitt brukt internt av BlueMountain, betyr utgivelsen 1 0 at biblioteket blir stabilere og klar for at andre skal adoptere. Selvfølgelig er det alltid rom for forbedring. Det finnes operasjoner som kan være raskere, rapportere dem, det er funksjoner som skal legges, vennligst foreslå dem, og det er sannsynligvis noen få gjenværende feil. Jeg markerte noen problemer som up-to-grabs i tilfelle du ønsket å bidra direkte. En annen viktig ting om Deedle er at det er en grunnleggende komponent rundt der vi kan bygge en fantastisk datavitenskapsstabel Hvis du er interessert sted, registrer deg på og følg denne bloggen for mer informasjon. Det er mange som bidro til Deedle og R-leverandøren, men prosjektene ville ikke eksistere uten Howard Mansell og Adam Klein på BlueMountain. Mange av R-leverandørene har blitt gjort av David Charboneau Thanks. type Miljø statisk medlem CommandLine streng statisk medlem CurrentDirectory streng med få, sett statisk medlem Avslutt exitCode int - enhet statisk medlem ExitCode int med få, sett statisk medlem ExpandEnvironmentVariables navnstreng - streng statisk medlem FailFast meldingsstreng - enhet 1 overload statisk medlem GetCommandLineArgs-enhet - streng statisk medlem GetEnvironmentVariable variabelstreng - streng 1 overlast statisk medlem GetEnvironmentVariables-enhet - IDictionary 1 overlast statisk medlem GetFolderPath-mappe SpecialFolder - streng 1 overbelastet nestetype SpecialFolder nestet type SpecialFolderOption. property string. Multiple items namespace FSharp. val shouldEqual aa - bb - unit. val titanic Frame int, s tring. Multiple items modul Frame .-------------------- type Frame statisk medlem ReadReader leser IDataReader - Frame int, streng statisk medlem CustomExpanders Dictionary Type, Func obj, seq streng Type obj statisk medlem NonExpandableInterfaces List Type statisk medlem NonExpandableTypes HashSet Type .-------------------- type Frame TRowKey, TColumnKey krever likestilling og likestilling grensesnitt IDynamicMetaObjectProvider grensesnitt INotifyCollectionChanged grensesnitt IFsiFormattable grensesnitt IFrame nye navn seq TColumnKey kolonner seq ISeries TRowKey - Frame TRowKey, TColumnKey privat ny radIndex IIndex TRowKey kolonneIndex IIndex TColumnKey data IVector IVector - Ramme TRowKey, TColumnKey medlem AddColumn kolonne TColumnKey serie ISeries TRowKey - enhetsmedlem Add Column kolonne TColumnKey serie seq V - enhet medlem Add Column kolonne TColumnKey serie ISeries TRowKey oppslag Lookup - enhedsmedlem AddColumn kolonne TColumnKey serie seq V oppslag Oppslag - enhet. Full navn, .-------------------- ny navn es seq TColumnKey kolonner seq ISeries TRowKey - Frame TRowKey, TColumnKey. static medlemsbane streng harHeaders bool inferTypes bool inferRows int skjema streng separatorer streng kultur streng maxRows int - Ramme int, streng statisk medlem harHeaders bool inferTypes bool inferRows int skjema streng separatorer streng kultur streng maxRows int - Ramme int, streng statisk medlem bane strengindeksKol streng harHeaders bool inferTypes bool inferRows int skjema streng separatorer streng kultur streng maxRows int - Ramme R, streng krever likestilling. val pivotTable rowGrp R - ObjectSeries C - RNew - colGrp R - ObjectSeries C - CNew - op Ramme R, C - T - ramme Ramme R, C - Ramme RNew, CNew krever likestilling og likestilling og likestilling og likestilling. val rad ObjectSeries string. member kolonne K - R medlem kolonne K tilbakebetaling R - R. Multiple elementer Val streng verdi T - streng. type bool Boolean. val countRows ramme Ramme R, C - int krever likestilling og likestilling. statisk medlem ramme Ramme R, C r C c C opp Func Fra meg R, C, T - Ramme R, C krever likestilling og likestillingsmedlem r TColumnKey c TColumnKey op Ramme TRowKey, TColumnKey - T - Ramme R, C krever likestilling og likestilling og likestilling og likestilling. val msft Ramme DatoTid, streng. Multiple elementer type DateTime struct nye flått int64 - DateTime 10 overloads medlem Legg til verdi TimeSpan - DateTime medlem AddDays verdi float - DateTime medlem AddHours verdi float - DateTime medlem AddMilliseconds verdi float - DateTime medlem AddMinutes verdi float - DateTime medlem AddMonths måneder int - DateTime medlem AddSeconds verdi float - DateTime member AddTicks verdi int64 - DateTime medlem AddYears verdi int - DateTime slutt .-------------------- DatoTid 0 andre overbelastninger DateTime flått int64 enhet 0 andre overbelastninger DateTime flått int64 , type DateTimeKind enhet 0 annen overbelastning DatoTid år int, måned int, dag int enhet 0 annen overbelastning DatoTid år int, måned int, dag int, kalender enhet 0 annen overbelastning DatoTid år int, måned int, dag int, time int, minu te int, annen int enhet 0 annen overbelastning DatoTid år int, måned int, dag int, time int, minutt int, andre int, slag DateTimeKind enhet 0 annen overbelastning DatoTid år int, måned int, dag int, time int, minutt int, andre int, kalenderenhet 0 andre overbelastninger DatoTid år int, måned int, dag int, time int, minutt int, andre int, millisekund int enhet 0 andre overbelastninger DatoTid år int, måned int, dag int, time int, minutt int, sekund int, millisekond int, snill DateTimeKind enhet 0 annen overloads. type Stats statisk medlem teller ramme Ramme R, C - Serie C, int krever likestilling og likestilling statisk medlem teller serie Serie K, V - int krever likestilling statisk medlem utvide Serie Serie K, float - Serie K, float krever likestilling statisk medlem expandingKurt serie Serie K, float - Serie K, float krever likestilling statisk medlem utviderMax serie Serie K, float - Serie K, float krever likestilling statisk medlem expandingMean serie Serie K, float - Serie K, flyter krever likestilling statisk ekspanderendeMin serie Serie K, flyte - Serie K, flyter krever likestilling statisk medlem utvideSkew serie Serie K, flottør - Serie K, flyte krever likestilling statisk medlem expandingStdDev serie Serie K, flottør - Serie K, flyter krever likestilling statisk medlem expandingSum serie Serie K, float - Serie K, float krever likestilling. Statisk medlemsstørrelse int-serie Serie K, float - Serie K, float krever likestilling. Statisk medlemserie Serie K, float - Serie K, float krever likestilling. Statisk medlemramme Ramme R, C - Serie C, float krever likestilling og likestilling statisk medlemserie Serie K, float - float krever likestilling. Type Array member Klon enhet - obj medlem CopyTo array Array indeks int - enhet 1 overload member GetEnumerator unit - IEnumerator member GetLength dimensjon int - int medlem GetLongLength dimensjon int - int64 medlem GetLowerBound dimensjon int - int medlem GetUpperBound dimensjon int - int medlem GetValue ParamArray indekser int - obj 7 overloads medlem Initialize enhet - enhetsmedlem IsFixedSize bool. val gjennomsnittlig array T - T krever medlem og medlem DivideByInt og medlem getZero. val groupRowsByInt kolonne C - ramme Ramme R, C - Ramme int R, C krever likestilling og likestilling. val getCol kolonne C - ramme Ramme R, C - Serie R, V krever likestilling og likestilling. Statisk medlemsnivå K - L - serie Serie K, float - Serie L, float krever likestilling og likestilling. val fst tuple T1 T2 - T1.Multiple objektmodul Serie .-- ------------------ type Serie statisk medlem av Nullables verdier seq Nullable a0 - Serie int, a0 krever standard konstruktor og verdi type og a0 ValueType statisk medlem ofObservations observasjoner seq a0 a1 - Serie a0, a1 krever likestilling statisk medlem avOptionalObservations observasjoner seq K a1 alternativ - Serie K, a1 krever likestilling statisk medlem avValues ​​verdier seq a0 - Serie int, a0 .------------------ - type Serie K, V krever likestilling grensesnitt IFsiFormattable grensesnitt ISeries K nye par seq KeyValuePair K, V - Serie K, V ne w-taster seq K-verdier seq V - Serie K, V ny indeks IIndex K vektor IVector V vektorBuilder IVectorBuilder indexBuilder IIndexBuilder - Serie K, V-medlem Etter lavereExklusiv K-Serie K, V-medlem Samlet aggregering Aggregasjon K observator Func DataSegment Serie K, V, KeyValuePair TNewKey, OptionalValue R - Serie TNewKey, R krever likestillingsmedlem Aggregate aggregation Aggregation K nøkkel Selector Func DataSegment Serie K, V, TNewKey valueSelector Func DataSegment Serie K, V, OptionalValue R - Serie TNewKey, R krever likhetsmedlem AsyncMaterialise Unit - Async Series K , V medlem Før øvre eksklusive K - Serie K, V. Full navn, .-------------------- Nye par Seq K, V - Serie K, V Nye nøkler Seq K-verdier seq V - Serie K, V ny K vektor IVector V - Serie K, V. val observasjonsserier Serie K, T - seq KT krever likestilling. val r1 Serie int, float. Full navn Deedle-v1 r1.val serier seq ab - Serie a, b krever likestilling. val r2 Serie int, float. Full navn De edle-v1 r2.val r3 Serie int, float. Full navn Deedle-v1 r3.val Merge 3 uordnet 300k lang serie repeterende Merge unit - unit. Full navn Deedle-v1 Merge 3 uordnet 300k lang serie gjentatt Merge. member ParamArray otherSeries Series K, V-serie K, V-medlem andreSeries seq Serie K, V-Serie K, V-medlem andre Serie Serie K, V-Serie K, V-medlem en annen Serie K, V oppførsel UnionBehavior - Serie K, V.

No comments:

Post a Comment