Friday 27 January 2017

Moving Average Nan Matlab

Mit MATLAB, wie finde ich die 3-Tage gleitenden Durchschnitt einer bestimmten Spalte einer Matrix und hängen Sie den gleitenden Durchschnitt zu dieser Matrix Ich versuche, die 3-Tage gleitenden Durchschnitt von unten nach oben der Matrix zu berechnen. Ich habe meinen Code: Angesichts der folgenden Matrix a und Maske: Ich habe versucht Umsetzung der conv Befehl, aber ich erhalte einen Fehler. Hier ist der Befehl conv, den ich versucht habe, auf der 2. Spalte der Matrix a zu verwenden: Die Ausgabe, die ich wünsche, wird in der folgenden Matrix gegeben: Wenn Sie irgendwelche Vorschläge haben, würde ich es sehr schätzen. Vielen Dank für die Spalte 2 der Matrix a, ich bin die Berechnung der 3-Tage gleitenden Durchschnitt wie folgt und platziert das Ergebnis in Spalte 4 der Matrix a (Ich umbenannt Matrix a als 39desiredOutput39 nur für Abbildung). Der 3-tägige Durchschnitt von 17, 14, 11 ist 14 der dreitägige Durchschnitt von 14, 11, 8 ist 11 der 3-tägige Durchschnitt von 11, 8, 5 ist 8 und der 3-Tage-Durchschnitt von 8, 5, 2 ist 5. Es gibt keinen Wert in den unteren 2 Zeilen für die 4. Spalte, da die Berechnung für den dreitägigen gleitenden Durchschnitt an der Unterseite beginnt. Die 39valid39 Ausgabe wird nicht angezeigt werden, bis mindestens 17, 14 und 11. Hoffentlich macht dies Sinn ndash Aaron 12 12 13 am 1:28 Im Allgemeinen würde es helfen, wenn Sie den Fehler anzeigen würde. In diesem Fall tun Sie zwei Dinge falsch: Zuerst muss Ihre Faltung durch drei (oder die Länge der gleitenden Durchschnitt) geteilt werden Zweitens beachten Sie die Größe von c. Sie können nicht einfach passen c in eine. Der typische Weg, um einen gleitenden Durchschnitt wäre, um die gleiche: aber das sieht nicht wie Sie wollen. Stattdessen sind Sie gezwungen, ein paar Zeilen zu verwenden: Ich habe eine Matrix-Zeitreihen-Daten für 8 Variablen mit etwa 2500 Punkten (10 Jahre mon-fri) und möchte die Mittelwerte, Varianz, Schiefe und Kurtosis bei einem Bewegen berechnen Durchschnittliche Basis. Lets sagen Frames 100 252 504 756 - Ich möchte die vier Funktionen oben auf über jedem der (Zeit-) Frames, auf einer täglichen Basis zu berechnen, so dass die Rückkehr für Tag 300 in dem Fall mit 100 Tag Frame, wäre Mittelwert Varianz Schiefe Kurtosis aus dem Zeitraum day201-day300 (100 Tage insgesamt). und so weiter. Ich weiß, das bedeutet, ich würde ein Array-Ausgang, und die erste Frame-Anzahl von Tagen wäre NaNs, aber ich kann nicht herausfinden, die erforderliche Indizierung, um diese getan. Jul 23, 2010, 10:31:25 pm »Dies ist eine interessante Frage, weil ich denke, die optimale Lösung ist anders für den Mittelwert, als es für die anderen Beispiel Statistiken ist. Ive lieferte ein Simulationsbeispiel unten, dass Sie durcharbeiten können. Zuerst wählen Sie einige beliebige Parameter und simulieren einige Daten: Für den Mittelwert verwenden Sie Filter, um einen gleitenden Durchschnitt zu erhalten: Ich hatte ursprünglich gedacht, dieses Problem mit conv wie folgt zu lösen: Aber wie PhilGoddard in den Kommentaren darauf hinwies, vermeidet der Filteransatz die Notwendigkeit für die Schleife. Beachten Sie auch, dass Ive gewählt, um die Termine in der Ausgangsmatrix entsprechen die Daten in X so in späteren Arbeiten können Sie die gleichen Indizes für beide verwenden. Somit werden die ersten WindowLength-1-Beobachtungen in MeanMA nan sein. Für die Varianz, kann ich nicht sehen, wie man entweder Filter oder conv oder sogar eine laufende Summe verwenden, um die Dinge effizienter zu machen, so dass ich stattdessen die Berechnung manuell bei jeder Iteration: Wir könnten etwas beschleunigen, indem wir die Tatsache, dass wir bereits haben Berechnet den durchschnittlichen gleitenden Durchschnitt. Ersetzen Sie einfach die innerhalb der Schleife Linie in der oben mit: Allerdings bezweifle ich, dies wird viel Unterschied machen. Wenn jemand eine schlaue Weise sehen kann, um Filter oder conv zu verwenden, um die sich bewegende Fensterabweichung zu erhalten, ist sehr interessiert, es zu sehen. Ich lasse den Fall der Schiefe und Kurtosis auf die OP, da sie im Wesentlichen genau das gleiche wie das Varianzbeispiel sind, aber mit der entsprechenden Funktion. Ein letzter Punkt: Wenn Sie die oben in eine allgemeine Funktion konvertiert wurden, könnten Sie in eine anonyme Funktion als eines der Argumente übergeben, dann hätten Sie eine gleitende durchschnittliche Routine, die für willkürliche Auswahl von Transformationen funktioniert. Endpunkt, Endpunkt: Für eine Sequenz von Fensterlängen, einfach Schleife über den gesamten Code-Block für jede Fensterlänge. Ja, die Filterfunktion ist zwar besser für den Mittelwert - aber das wollte ich für mehrere verschiedene Funktionen tun, nicht nur für den Mittelwert. Nur meine Antwort geschrieben, weil es für mich gearbeitet und ich dachte, es könnte jemand anderem zu helfen. Ndash Dexter Morgan Apr 15 14 am 12:40


No comments:

Post a Comment