Monday 3 July 2017

Moving Average Haskell

Ich arbeite daran, Haskell zu lernen, also versuchte ich, eine gleitende Durchschnittsfunktion zu implementieren. Hier ist mein Code: wo der Benutzer ruft mAverage mit einer Länge für jeden Durchschnitt und die Liste der Werte (z. B. mAverage 4 1,2..100). Allerdings, wenn ich den Code auf den Eingang mAverage 4 1,2..100000 laufen. Ich bekomme, dass es 3,6 Sekunden dauert in ghci (mit: set s) und nutzt ein Gigabyte Speicher. Dies scheint sehr ineffizient für mich, da die entsprechende Funktion nimmt einen Bruchteil einer Sekunde in Python. Gibt es eine Möglichkeit, dass ich meinen Code effizienter machen könnte Ein Weg, um das Schiebefenster zu tun ist, in der ersten Summe als Float übergeben. In die ursprüngliche Liste übergehen (um von der aktuellen Summe subtrahiert zu werden) und die ursprüngliche Liste mit k Einträgen abgelegt (zur Verwendung zur Addition der aktuellen Summe). Dann ist die nächste Summe die Summe, die minus dem ersten Element der Subtraktionsliste plus dem ersten Element der Additionsliste übergeben wird. Ndash Chai T. Rex Dec 27 16 at 20:33 Wenn Sie etwas Neues lernen wollen, können Sie einen Blick auf diese schöne Lösung für Moving Average Problem. Es ist von einem meiner Studenten geschrieben, so dass ich nicht behaupten Autorenschaft. Ich mag es, weil seine sehr kurz. Das einzige Problem hier ist die durchschnittliche Funktion. Solche Funktionen sind dafür bekannt, schlecht zu sein. Stattdessen können Sie schöne Falten von Gabriel Gonzalez. Und ja, diese Funktion dauert O (k) Zeit (wobei k ist die Größe des Fensters) für die Berechnung der Durchschnitt des Fensters (Ich finde es besser, weil Sie Fließkomma-Fehler Gesicht, wenn Sie versuchen, nur neue Element hinzufügen Fenster und subtrahieren zuletzt) . Oh, es nutzt auch State Monade :) UPD: nach einiger Code-Überprüfung bemerkte ich, dass es nicht notwendig ist, Falten hier zu verwenden, um den Durchschnitt zu berechnen. Sie wissen, dass Länge wird immer n, so können Sie einfach die durchschnittliche Funktion, wo Klausel. Antwortete Dec 27 16 am 23:26 Heres eine Lösung für Sie. Die Idee ist, zwei Listen zu scannen, eine, wo das Mittelungsfenster beginnt, und ein anderes, wo es endet. Das Erhalten eines Endstücks einer Liste kostet so viel wie das Scannen des Teils waren Überspringen, und waren nicht alles kopieren. (Wenn die Fenstergröße gewöhnlich recht groß war, konnten wir die restlichen Daten zusammen mit dem Zählen der Summeninitialdaten in einem Durchgang berechnen.) Wir erzeugen eine Liste von Teilsummen, wie in meinem Kommentar beschrieben, dann teilen sie durch die Fensterbreite, um Durchschnittswerte zu erhalten . Während slidingAverage die Durchschnittswerte für die voreingenommene Position berechnet (Fensterbreite nach rechts), berechnet centeredSlidingAverage zentrierte Mittelwerte mit halber Fensterbreite nach links und nach rechts. Wenn ich versuche, Länge slidingAverage 10 1..1000000. Es dauert weniger als eine Sekunde auf meinem MBP. Wegen der Faulheit. CenteredSlidingAverage dauert etwa die gleiche Zeit. Beantwortet Dec 27 16 at 22:25 Ihre Antwort 2017 Stack Exchange, IncGiven, dass wir39re in einer Sprache ohne Arrays, nehme ich an, dass Sie39re eine Sprache Anfänger. So oder so, zusätzliche Informationen sollten edit ed in die Frage selbst, so dass andere Benutzer don39t müssen Informationen aus den Kommentaren zu scavenge. Ich habe keine Zeit, eine vollständige Antwort zu geben, aber dies sollte mit Schwänzen möglich sein. ZipWith und ein wenig Grenze fummeln. Ndash Zeta Nov 6 16 at 10:43 Moving Durchschnitt kann mit einer mealy Maschine berechnet werden, wobei der interne Zustand vorherige Werte sind. Ill zeigen einen gleitenden Durchschnitt über drei Argumenten Beispiel, können Sie fiddle Sie sich z. B. Machen es parametrisable in der Größe. Mealy Maschine ist im Wesentlichen ein Anfangszustand, und State-Eingang für neue State-Output-Funktion: Nehmen wir an, dass Anfangszustand alle Nullen sind, und schreiben Sie eine Funktion für den gleitenden Durchschnitt über 3. Jetzt haben wir alle Stücke, lassen Sie die Maschine am Eingang : Sie können zuerst erstellte Werte löschen, da der interne Maschinenzustand aufwärmt. Für eine gleitende Maschine mit beliebiger Größe können Sie Data. Sequence verwenden. Als seine viel bessere Datenstruktur, wenn Sie zu einem Ende zu drücken, während Pop aus einer anderen, dann einzelne verkettete Liste. . Warum Im reden über Mealy Maschine Weil irgendwann youll höchstwahrscheinlich in Situation, wo Sie brauchen, um einige Streaming-Bibliothek in Haskell verwenden: pipes. Rohrleitungen oder Maschinen. Dann Mealy Maschine Ansatz wird die einzige vernünftige Lösung sein. Auch können Sie autoregressive Modelle als auch Haskell Jobs Die Nachfrage Trend von Stellenanzeigen zitiert Haskell als Anteil aller IT-Jobs mit einem Spiel in der Kategorie Programmiersprachen. Haskell Gehaltstabelle Diese Grafik zeigt den dreimonatigen gleitenden Durchschnitt für Gehälter, die in permanenten IT-Jobs zitiert wurden. Haskell Gehalt Histogramm Diese Tabelle bietet ein Gehalt Histogramm für IT-Jobs zitiert Haskell in den 3 Monaten bis 25 Januar 2017 innerhalb Großbritanniens. Haskell Top 26 Arbeitsplätze Die folgende Tabelle zeigt die Nachfrage und stellt einen Leitfaden für die in den IT-Jobs zitierten mittleren Gehälter dar, die Haskell innerhalb des Vereinigten Königreichs in den drei Monaten bis zum 25. Januar 2017 zitieren. Die Spalte Rangänderung gibt Anzeichen für die Veränderung der Nachfrage Innerhalb jedes Standortes auf der Grundlage der gleichen 3 Monate Zeitraum im vergangenen Jahr. Rank Änderung auf die gleiche Zeit Letztes Jahr Matching Permanent IT Job-Anzeigen Median Gehalt Letzte 3 Monate


No comments:

Post a Comment