Thursday, 8 June 2017

Qt Gleitenden Durchschnitt

Ich versuche, einen QVector aus einer Funktion zurückzugeben, die den gleitenden Durchschnitt berechnen soll. Meine Frage ist, wie die Funktion effizienter zu gestalten. Das Mathe ist fein, Im mehr wundernd, wenn ich etwas falsch tue, wenn ich den QVector zurückgebe. Hier ist der Code, den ich bisher habe: Ich verwende den Default-Konstruktor, um den QVector davon abzuhalten, einen Default-Wert einzustellen. Ich versuchte die gleiche Sache mit der Größe, die viel langsamer ist. Haben Sie Anregungen, wie dies optimiert werden kann Da Sie behaupten, dass die Rückgabe am längsten dauert, liegt das Problem möglicherweise nicht in der Funktion selbst, sondern an der Stelle, an der der zurückgegebene Wert verwendet wird. Leider, Heres, wo Ihr Code verschwendet Zeit: In Zuteilung der QVector jedes Mal, wenn der Durchschnitt aufgerufen wird. Vermutlich ist seine aufgerufen wiederholt, so theres keine Notwendigkeit, es zuzuweisen einen neuen Vektor jedes Mal. Im Bediener QVector ::. Es hat ein bisschen mehr Overhead als plain Array-Zugriff, weil theres diese nervtötend istDetached-Anruf bei jedem Aufruf zum Operator getan. In QVector :: anhängen. Nicht nur, dass es isDetached aufruft. Sondern auch die Länge überprüft und ändert. Beachten Sie, dass theres absolut nichts falsch mit der Rückgabe Ihres Wertes. Es ist eine triviale Operation und dauert fast keine Zeit. Sie tun es OK, wenn es darum geht zurückzukehren - und nur zurückzukehren. Aber Sie zeigen nicht uns, wie Sie den zurückgebrachten Wert verwenden, also kann ich nicht erklären Ihnen, wenn möglicherweise youre, das etwas falsch dort tut. Um wiederholte Zuweisungen und Operator-Overhead zu vermeiden, können Sie eine Klasse verwenden, die einen Vektor für die Wiederverwendung bereithält und eine Zeiger-zu-Vektordaten verwendet, anstatt den Vektor direkt zu verwenden. Um es schneller gehen würde wahrscheinlich die Verwendung von SIMD intrinsics. I wissen, dass dies erreichbar mit Boost wie pro: Aber ich möchte wirklich vermeiden, mit Boost. Ich habe gegoogelt und keine geeigneten oder lesbaren Beispiele gefunden. Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Gleitkommazahlstroms mit den letzten 1000 Zahlen als Datenprobe verfolgen. Was ist der einfachste Weg, um dies zu erreichen, experimentierte ich mit einem kreisförmigen Array, exponentiellen gleitenden Durchschnitt und einem einfacheren gleitenden Durchschnitt und festgestellt, dass die Ergebnisse aus dem kreisförmigen Array meine Bedürfnisse am besten geeignet. Wenn Ihre Bedürfnisse sind einfach, können Sie nur versuchen, mit einem exponentiellen gleitenden Durchschnitt. Setzen Sie einfach, Sie eine Akkumulator-Variable, und wie Ihr Code sieht auf jede Probe, aktualisiert der Code den Akkumulator mit dem neuen Wert. Sie wählen eine konstante Alpha, die zwischen 0 und 1 ist, und berechnen Sie: Sie müssen nur einen Wert von Alpha zu finden, wo die Wirkung einer gegebenen Probe nur für etwa 1000 Proben dauert. Hmm, Im nicht wirklich sicher, dass dies für Sie geeignet ist, jetzt, dass Ive es hier. Das Problem ist, dass 1000 ist ein ziemlich langes Fenster für einen exponentiellen gleitenden Durchschnitt Im nicht sicher, gibt es ein Alpha, die den Durchschnitt über die letzten 1000 Zahlen, ohne Unterlauf in der Gleitkomma Berechnung. Aber, wenn Sie einen kleineren Durchschnitt wünschen, wie 30 Zahlen oder so, dieses ist eine sehr einfache und schnelle Weise, es zu tun. Beantwortet Jun 12 12 at 4:44 1 auf Ihrem Beitrag. Der exponentielle gleitende Durchschnitt kann zulassen, dass das Alpha variabel ist. Somit kann dies dazu verwendet werden, Zeitbasisdurchschnitte (z. B. Bytes pro Sekunde) zu berechnen. Wenn die Zeit seit dem letzten Akkumulator-Update mehr als 1 Sekunde beträgt, lassen Sie Alpha 1.0 sein. Andernfalls können Sie Alpha zulassen (usecs seit letztem update1000000). Ndash jxh Grundsätzlich möchte ich den gleitenden Durchschnitt eines laufenden Stroms eines Gleitkommazahls mit den neuesten 1000 Zahlen als Datenbeispiel zu verfolgen. Beachten Sie, dass im Folgenden die Summe als Elemente als addiert ergänzt wird, wobei kostspielige O (N) - Transversionen vermieden werden, um die Summe zu berechnen, die für den durchschnittlichen Bedarf erforderlich ist. Insgesamt wird ein anderer Parameter von T gebildet, um z. B. Mit einer langen langen, wenn insgesamt 1000 lange s, eine int für char s, oder eine doppelte bis total float s. Dies ist ein wenig fehlerhaft, dass Nennsignale an INTMAX vorbeiziehen könnten - wenn Sie darauf achten, dass Sie ein langes langes nicht signiertes verwenden konnten. Oder verwenden Sie ein zusätzliches Bool-Datenelement, um aufzuzeichnen, wenn der Container zuerst gefüllt wird, während numsamples rund um das Array (am besten dann umbenannt etwas harmlos wie pos). Man nehme an, daß der quadratische Operator (T-Abtastwert) tatsächlich quadratischer Operator (T-Abtastwert) ist. Ndash oPless Jun 8 14 um 11:52 Uhr oPless ahhh. Gut beobachtet. Eigentlich meinte ich, dass es sich um void operator () (T sample) handelt, aber natürlich könntet ihr auch irgendeine Notation verwenden, die ihr mochtet. Wird beheben, danke. Ndash Tony D Jun 14 14 um 14:27 Berechnen Sie die gewogenen Durchschnittswerte in Excel mit SUMPRODUCT Ted French hat über 15 Jahre Erfahrung im Unterrichten und Schreiben über Tabellenkalkulationsprogramme wie Excel, Google Spreadsheets und Lotus 1-2-3. Lesen Sie weiter Aktualisiert am 07. Februar 2016. Gewichtet gegen Ungewichtet Durchschnittliche Übersicht Normalerweise wird bei der Berechnung des durchschnittlichen oder arithmetischen Mittels jede Zahl gleich groß oder gleich groß. Der Mittelwert wird berechnet, indem ein Zahlenbereich addiert und dann durch die Anzahl der Werte im Bereich dividiert wird. Ein Beispiel wäre (2433434435436) 5, die einen ungewichteten Durchschnitt von 4 ergibt. In Excel können solche Berechnungen einfach mit der Funktion AVERAGE durchgeführt werden. Ein gewichteter Durchschnitt betrachtet dagegen eine oder mehrere Zahlen im Bereich, die mehr wert sind oder ein größeres Gewicht haben als die anderen Zahlen. Beispielsweise sind bestimmte Noten in der Schule, wie zum Beispiel die Abschlussprüfung und die Abschlussprüfung, in der Regel mehr wert als regelmäßige Tests oder Aufgaben. Wenn eine Durchschnittsberechnung verwendet wird, um die endgültige Note eines Schülers zu berechnen, erhält die Mittel - und Abschlussprüfung ein größeres Gewicht. In Excel können die gewichteten Mittelwerte mit Hilfe der Funktion SUMPRODUCT berechnet werden. Funktionsweise der SUMPRODUCT-Funktion Was SUMPRODUCT tut, multipliziert die Elemente von zwei oder mehr Arrays und addiert oder addiert die Produkte. Wenn beispielsweise in einer Situation zwei Arrays mit vier Elementen als Argumente für die SUMPRODUCT-Funktion eingegeben werden: das erste Element von array1 wird mit dem ersten Element in array2 multipliziert, das zweite Element von array1 wird mit dem zweiten Element von array2 und dem dritten Element multipliziert Element des Arrays 1 mit dem dritten Element des Arrays 2 multipliziert wird, wird das vierte Element des Arrays 1 mit dem vierten Element des Arrays 2 multipliziert. Als nächstes werden die Produkte der vier Multiplikationsoperationen summiert und als Ergebnis durch die Funktion zurückgegeben. Excel SUMPRODUCT Funktion Syntax und Argumente Eine function39s-Syntax bezieht sich auf das Layout der Funktion und enthält den Namen, die Klammern und die Argumente der Funktion 39. Die Syntax für die Funktion SUMPRODUCT ist: SUMPRODUCT (array1, array2, array3, array255) Die Argumente für die SUMPRODUCT-Funktion sind: array1: (erforderlich) das erste Array-Argument. Array2, array3. Array255: (optional) zusätzliche Arrays, bis zu 255. Mit zwei oder mehr Arrays multipliziert die Funktion die Elemente jedes Arrays und addiert dann die Ergebnisse. - die Arrayelemente können Zellverweise auf den Speicherort der Daten im Arbeitsblatt oder durch arithmetische Operatoren getrennte Zahlen - wie Plus (43) oder Minuszeichen (-) sein. Wenn Zahlen eingegeben werden, ohne von Operatoren getrennt zu werden, behandelt Excel sie als Textdaten. Diese Situation wird im folgenden Beispiel behandelt. Alle Arrayargumente müssen dieselbe Größe haben. Mit anderen Worten, es muss die gleiche Anzahl von Elementen in jedem Array sein. Wenn nicht, gibt SUMPRODUCT den VALUE-Fehlerwert zurück. Wenn es sich bei Array-Elementen nicht um Zahlen handelt, wie beispielsweise Textdaten, behandelt SUMPRODUCT sie als Nullen. Beispiel: Berechnen des gewogenen Mittelwertes in Excel Das im obigen Bild gezeigte Beispiel berechnet den gewichteten Durchschnitt für eine student39s-Endmarke mit Hilfe der Funktion SUMPRODUCT. Die Funktion erfüllt dies durch Multiplizieren der verschiedenen Markierungen mit ihrem individuellen Gewichtungsfaktor, wobei die Produkte dieser Multiplikationsoperationen zusammen addiert werden, die Summe aus dem Gewichtungsfaktor 7 (1431432433) für die vier Bewertungen dividiert. Eingeben der Gewichtungsformel Wie die meisten anderen Funktionen in Excel wird SUMPRODUCT normalerweise mit dem Dialogfeld function39s in ein Arbeitsblatt eingegeben. Da jedoch die Gewichtungsformel SUMPRODUCT in einer nicht standardisierten Weise verwendet - wird das Ergebnis der Funktion durch den Gewichtungsfaktor geteilt - muss die Gewichtungsformel in eine Arbeitsblattzelle eingegeben werden. Die folgenden Schritte wurden verwendet, um die Gewichtungsformel in die Zelle C7 einzugeben: Klicken Sie auf die Zelle C7, um sie zur aktiven Zelle zu machen - die Position, an der die studentische Schlussmarkierung angezeigt wird. Geben Sie die folgende Formel in die Zelle ein: Drücken Sie die Eingabetaste auf der Tastatur Die Antwort 78.6 sollte in Zelle C7 erscheinen - Ihre Antwort kann mehr Nachkommastellen haben Der ungewichtete Durchschnitt für die gleichen vier Mark würde 76.5 Da der Schüler bessere Ergebnisse für seine Halbzeit - und Abschlussprüfungen hatte, hat die Gewichtung des Durchschnitts dazu beigetragen, seine Gesamtnote zu verbessern. Formelvarianten Um zu betonen, dass die Ergebnisse der SUMPRODUCT-Funktion durch die Summe der Gewichte für jede Bewertungsgruppe geteilt werden, wurde der Divisor - der Teil der Teilung - als (1431432433) eingetragen. Die Gesamtgewichtungsformel könnte durch Eingabe der Zahl 7 (Summe der Gewichte) als Divisor vereinfacht werden. Die Formel wäre dann, wenn die Anzahl der Elemente in der Gewichtungsmatrix klein ist und sie leicht addiert werden können, aber sie wird weniger wirksam, wenn die Anzahl der Elemente in der Gewichtungsmatrix zunimmt, wodurch ihre Addition erschwert wird. Eine andere Option und wahrscheinlich die beste Wahl, da sie Zellreferenzen anstelle von Zahlen in der Summe des Divisors verwendet, wäre die Verwendung der SUM-Funktion, um den Divisor mit der Formel zu berechnen: Es ist in der Regel am besten Zellreferenzen statt tatsächlichen Zahlen eingeben In Formeln, da es die Aktualisierung von ihnen vereinfacht, wenn sich die Daten der Formel 39 ändern. Wenn zum Beispiel die Gewichtungsfaktoren für Zuweisungen im Beispiel auf 0,5 und für Tests auf 1,5 geändert wurden, müssten die ersten beiden Formen der Formel manuell bearbeitet werden, um den Divisor zu korrigieren. In der dritten Variante müssen nur die Daten in den Zellen B3 und B4 aktualisiert werden, und die Formel wird das Ergebnis neu berechnen.


No comments:

Post a Comment