Verfasst am: 22.09.2016, 11:29
Titel: Bearbeiten eines einzeiligen Vektors
Hallo,
Ich habe ein Problem mit der Verarbeitung von sehr großen einzeiligen Vektoren.
In dem Einzeiligen Vektor (Bsp. 1x376488) stehen Zahlen aus einem Versuch:
Diese Zahlen sind grundsätzlich so aufgebaut 000 .1111 00000 .2222 .00000 .3333 usw.
Mein Problem ist, dass der Sprung der Werte (1,2,3 auf 0) nicht sofort erfolgt, sondern ein paar Werte dazwischen liegen. Beispiel: 16,16,16,16,16, 12, 8, 4,1,0,0,0,
Gewünscht wäre 16,16,16,16,0,0,0,0 ; die Werte dazwischen sollten 0 gesetzt werden.
Gibt es eine Möglichkeit das irgendwie zu realisieren, ohne das per Hand machen zu müssen ?
Mit Zähler und der Mean-Funktion habe ich es schon versucht, aber das klappt nicht wirklich.
Da immer neue Vektoren eingelesen werden mit unterschiedlichen Längen kann man auch keine bestimmten Spalten ansprechen und diese Null setzen.
eine for-Schleife über die Elemente laufen lassen, in der Elemente 0 gesetzt werden, wenn das nächste ungleiche nach links größer und das nächste ungleiche nach rechts kleiner ist (jeweils mit
find
).
Es geht vermutlich effizienter, aber schneller als den Vektor händisch zu durchlaufen dürfte es allemal sein :)
Ich sollte meinen Vektor etwas genauer beschreiben.
Es handelt sich um ein Signal, das auf einen bestimmten Wert "x" geht (angefangen bei 1), dann auf Null zurückspringt und dann auf den vorherigen Wert +1 , anschließend wieder auf 0 usw.
Die Werte sind leider nicht konstant bei einem Wert, sondern schwanken +- 0.1.
Ein Ansatz wäre, diejenigen Werte, die dem vorherigen Wert um mehr als bspw. 0.5 abweichen gleich 0 zu setzen.
Im Anhang ist der Vektor.
Null zu setzen sind die Werte vor und nach erreichen des jeweiligen "Zielwerts"
beim Nächsten mal verwende ich gleich ein reales Beispiel, ich dachte durch die Vereinfachung ist es leichter verständlich, aber das haut dann eben nicht hin.
Vielen Dank für deine Hilfe, mit deiner Lösung kann ich weiterarbeiten!
Hat funktioniert!
Übrig bleiben nun nur noch kleine Ausreisser, wie in der Grafik zu sehen ist.
Wie könnte man den markierten Bereich noch eliminieren ?
Das Signal ist auf dem Bild zu sehen. Kann ich auch einen bestimmten Bereich mitteln, wie es rot markiert ist ?
Beispielsweise den Mittelwert der Zellen 30000-60000 usw. sodass sich ein Verlauf ergibt wie in rot angedeutet.
Den Vektor ist ebebfalls angehängt.
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.