Saturday, 8 April 2017

Umzugsdurchschnitt Linq

Um eine asymptotische Leistung von O n zu erreichen, wie die handcodierte Lösung, können Sie die Aggregate-Funktion wie in verwenden. Der akkumulierte Wert, der als anonymer Typ implementiert wird, enthält zwei Felder Ergebnis enthält die Ergebnisliste, die bis jetzt aufbaut Perioden-1-Elemente Die Aggregat-Funktion fügt den aktuellen Wert der Arbeitsliste hinzu, baut den aktuellen Durchschnitt und fügt sie dem Ergebnis hinzu und entfernt dann den ersten ältesten Wert aus der Arbeitsliste. Der Samen, dh der Startwert für die Akkumulation, wird aufgebaut Indem du die ersten Perioden-1-Elemente in die Arbeit und Initialisierung Ergebnis in eine leere Liste. Conently tha Aggregation beginnt mit Element Zeitraum durch Überspringen Periode-1 Elemente am Anfang. In Funktions-Programmierung ist dies ein typisches Verwendungsmuster für die aggretate oder fold-Funktion , Btw. Die Lösung ist nicht funktionell sauber, dass die gleichen Listenobjekte Arbeit und Ergebnis in jedem Schritt wiederverwendet werden Ich bin mir nicht sicher, ob das Probleme verursachen könnte, wenn einige zukünftige Compiler versuchen, die Aggregate-Funktion automatisch zu ergänzen, andererseits auch ich Nicht sicher, wenn das überhaupt möglich ist. Eine rein funktionale Lösung sollte bei jedem Schritt neue Listen erstellen. Beachten Sie auch, dass C mächtige Listenausdrücke fehlt. In einem hypothetischen Python-C-gemischten Pseudocode könnte man die Aggregationsfunktion schreiben Etwas eleganter in meiner bescheidenen Meinung. Geben Sie die Laufzeit von O n 2 an, da Sie mehr und mehr Elemente bei jedem Schritt überspringen müssen und afaik Skip ich muss ich mal anrufen Meine Antwort auf eine Lösung in O n Zeit, die ich gerade bemerkt habe Die OPs kommentieren unten, dass er sie möglicherweise die Werte aus einer SQL DB in der Zukunft bekommen würde. In diesem Fall würde ich jeden stark davon abhalten, von dieser Lösung MartinStettner Mar 3 11 bei 0 53.Für die effizienteste Möglichkeit, einen Moving Average mit zu berechnen LINQ, du solltest nicht LINQ verwenden. Stattdessen schlage ich vor, eine Helper-Klasse zu schaffen, die einen gleitenden Durchschnitt in der effizientesten Weise mit einem kreisförmigen Puffer und einem kausalen gleitenden Durchschnittsfilter berechnet, dann eine Erweiterungsmethode, um sie für LINQ zugänglich zu machen. Die gleitende Durchschnitt. Diese Klasse bietet eine sehr schnelle und leichte Implementierung eines MovingAverage-Filters Es schafft einen kreisförmigen Puffer der Länge N und berechnet eine add, eine Subtraktion und eine Multiplikation pro Datenpunkt angehängt, im Gegensatz zu den N Multiplikations-Adds pro Punkt für die Brute-Force-Implementierung. Die oben erwähnte Erweiterungsmethoden wickeln die MovingAverage-Klasse ein und erlauben das Einfügen in einen IEnumerable-Stream. Um dies in einer funktionelleren Weise zu tun, brauchst du eine Scan-Methode, die in Rx existiert, aber nicht in LINQ. Let s Look Wie es aussehen würde, wenn wir eine Scan-Methode haben. Und hier ist die Scan-Methode, genommen und angepasst von hier. This sollte bessere Leistung als die Brute-Force-Methode, da wir eine laufende Summe verwenden, um die SMA zu berechnen Wir müssen die erste Periode berechnen, die wir hier Samen nennen. Dann ist jeder nachfolgende Wert, den wir aus dem akkumulierten Samenwert berechnen. Dazu brauchen wir den alten Wert, der t-delta und der neueste Wert ist, für den wir die Serie einmal zipieren Von Anfang an und einmal von der delta verschoben. Am Ende machen wir einige Aufräumarbeiten durch Hinzufügen von Nullen für die Länge der ersten Periode und Hinzufügen der ersten Seed-Wert. answered Jun 19 13 bei 22 58. Mein Ziel ist es, einen gewichteten Durchschnitt zu bekommen Aus einer Tabelle, basierend auf anderen Tabellen Primärschlüssel. Ich muss einen gewichteten Durchschnitt auf der Grundlage der Länge eines Segments zu bekommen und ich muss die Werte von -1 ignorieren Ich weiß, wie dies in SQL zu tun, aber mein Ziel ist, dies zu tun In LINQ Es sieht so aus wie in SQL. Ich bin immer noch ziemlich neu in LINQ, und mit einer harten Zeit herauszufinden, wie würde ich dies übersetzen Das Ergebnis gewichteten Durchschnitt sollte auf etwa 55 3 Vielen Dank. Schicht Apr 26 10 bei 15 23.Ich genügt, dass ich eine Erweiterungsmethode für LINQ erstellt habe. Sobald du deine Teilmenge von Daten bekommst, sieht der Anruf so aus. Dies ist sehr praktisch geworden, weil ich einen gewichteten Durchschnitt einer beliebigen Gruppe von Daten auf der Grundlage eines anderen Feldes innerhalb bekommen kann Die gleiche Aufzeichnung. Ich überprüfe jetzt für die Teilung durch Null und werfen eine detailliertere Ausnahme anstatt zurückzukehren 0 Erlaubt dem Benutzer, die Ausnahme zu fangen und behandeln, wie gebraucht. Ich habe eine 4000 Menge Daten von Aktien und tring, um den gleitenden Durchschnitt für alle zu berechnen Daten-Werte, aber da der gleitende Durchschnitt auf vorherigen Daten basiert und ich kann nicht berechnen die 15-Tage-SMA für die ersten 14 Tage, überspringen Sie die ersten 14 Tage und berechnen die SMA auf den Rest der Daten Und es muss verwendet werden LINQ zu erreichen Kann jemand geben Sie eine Probe oder Hinweis, wie man mit LINQ zu berechnen gleitenden Durchschnitt Die Ausgabe für die durchschnittlichen Werte sind rund 500 si wirklich don t verstehen, wie ist das möglich, um diesen hohen Wert zu bekommen. Moving averager mit 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.Gebiet von Leemx Freitag, 16. November 2012 2 59 AM. Moved von Lisa Zhu Microsoft Kontingent Mitarbeiter Montag, 19. November 2012 7 38 Uhr Linq verwandte Von Visual C General. Friday, 16. November 2012 2 42 AM. Um einen gleitenden Durchschnitt zu schaffen, würde ich beginnen, indem ich einen Bereich von 0 bis Länge der Datenliste - Länge der Bewegungsperiode, dann für jeden Wert in der Reichweite Selektiere Elemente x bis x Länge des Bewegungszeitraums und berechne den Durchschnitt. All in einer netten LINQ-Anweisung. Hinweis, dass dies nicht sehr effizient ist, da du im Grunde über die Datenliste für jeden Wert in der range it. Hey, aussehen wirst Unterschriften von mehr als 60 cha. Edited von Arno Brouwer Freitag, 23. November 2012 4 42 PM. Marked als Antwort von Alexander Sun Freitag, 07. Dezember 2012 2 44 AM. Friday, 23. November 2012 4 41 PM. All Antworten. Ein Beispiel für Ihre LINQ-Anweisung würde helfen. Prematur-Optimierung ist die Wurzel aller bösen - Knuth. To schaffen einen gleitenden Durchschnitt, würde ich beginnen, indem Sie einen Bereich von 0 bis Länge der Datenliste - Länge der bewegten Zeitraum, dann für jeden Wert Im Bereich Auswahl Elemente x bis x Länge der Bewegungsperiode und berechnen die durchschnittlich. All in einer schönen LINQ-Anweisung. Hinweis, dass dies nicht sehr effizient ist, da Sie im Grunde über die Datenliste für jeden Wert in der range. Hey, aussehen Dieses System erlaubt Unterschriften von mehr als 60 cha. Edited von Arno Brouwer Freitag, 23. November 2012 4 42 PM. Marked als Antwort von Alexander Sun Freitag, 07. Dezember 2012 2 44 AM. Freitay, 23. November 2012 4 41 PM. Microsoft führt eine Online-Umfrage durch, um Ihre Meinung über die Msdn-Website zu verstehen Wenn Sie sich für die Teilnahme entscheiden, wird Ihnen die Online-Umfrage vorgestellt, wenn Sie die Msdn-Website verlassen. Möchten Sie teilnehmen. Halten Sie uns, um MSDN zu verbessern UserVoice Seite zu unterwerfen und abstimmen auf ideas. Dev centers. Learning Ressourcen.


No comments:

Post a Comment