WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

NaNs zusätzlich an Stellen eines Vektors einfügen

 

Matlab_User85
Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2014, 11:06     Titel: NaNs zusätzlich an Stellen eines Vektors einfügen
  Antworten mit Zitat      
Hallo zusammen,

im Rahmen einer Messwerterfassung möchte ich Messwerte in Matlab einlesen und analysieren.
Hierbei liegt einerseits ein Vektor mit den Messwerten vor und andererseits ein Vektor mit dem zugehörigen Zeitpunkt der Erfassung in Form einer Zahlenreihe. Die Länge von v_mess und v_kontroll sind identisch
z.B.
Code:

v_mess=[230 231 232 233 231 231]
v_kontroll=[1 2 5 6 7 8]
 

Wie in v_kontroll beispielhaft gezeigt fehlen die Zahlen 3 und 4.
Das bedeutet, dass an den Stellen (zum Zeitpunkt) 3 und 4 keine Messwerte erfasst wurden und im Vektor v_mess an den Stellen 3 und 4 jeweils zusätzlich NaN eingefügt werden soll, um bei der graphischen Analyse die zeitliche Korrektheit wieder herstellen zu können.

Das Ziel für die Analyse ist also ein v_mess von:
Code:

v_mess=[230 231 NaN NaN 232 233 231 231]
 


Mein erster Ansatz zum Auffinden der fehlenden Stellen im Vektor v_kontroll ist der folgende:

Code:

v_kontroll=[1 2 5 6 7 8]
v_soll=[1:max(v_kontroll)]
[c, k]=setdiff(v_soll, v_kontroll)
 


c bzw. k liefern mir die mit NaN aufzufüllenden Stellen (Komponenten) des des Vektors v_mess.

Wie bekomme ich nun die durch c bzw. k gelieferten Stellen des Vektors v_mess mit NaN durch Matlab aufgefüllt?

Bin Neuling in Matlab und bitte um eure Hilfe Smile
Private Nachricht senden Benutzer-Profile anzeigen


Alex4456
Forum-Anfänger

Forum-Anfänger


Beiträge: 47
Anmeldedatum: 17.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2014, 11:13     Titel:
  Antworten mit Zitat      
Hallo,

Code:
newVec(1:length(v_mess)) = NaN;
newVec(v_kontroll) = v_mess;


Sofern dein Vektor v_kontroll immer mit 1 anfängt, sollte das funktionieren.
Ansonsten kann man das Prinzip aber auch leicht abändern, sodass es für alle Vektoren geht.

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_User85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2014, 11:41     Titel:
  Antworten mit Zitat      
Alex4456 hat Folgendes geschrieben:
Hallo,

Code:
newVec(1:length(v_mess)) = NaN;
newVec(v_kontroll) = v_mess;


Sofern dein Vektor v_kontroll immer mit 1 anfängt, sollte das funktionieren.
Ansonsten kann man das Prinzip aber auch leicht abändern, sodass es für alle Vektoren geht.

Grüße


Die Zahlvariable wird mit 1 initialisiert. Falls jedoch mal mit einer anderen Zahl begonnen werden würde (z.B. ab 3). Wie würde denn dann der Ansatz aussehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
gomar
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 23.09.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.11.2014, 16:26     Titel:
  Antworten mit Zitat      
Hallo!
Wenn mich gerade nicht alles täuscht sieht der Ansatz dann so aus:
Code:

newVec(1:max(v_kontroll)) = NaN;
newVec(v_kontroll) = v_mess;
 

Gruß, Gomar
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_User85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2014, 15:18     Titel:
  Antworten mit Zitat      
Vielen Dank schonmal für eure Beiträge.

Ich habe meine Messwerterfassung nochmals überarbeitet.
Vor dem Beginn der Zahlenreihe, welche normalerweise mit der Zahl 1 beginnt, können nun Nullen entstehen, z. B.

Code:

v_mess=[0 0 0 230 231 232 233 0 231]
v_kontroll=[0 0  0 1 2 5 6 7 8]
 


Die Anzahl der vorangestellten Nullen des Messvektors v_mess und des Kontrollvektors v_kontroll sind identisch.

Ich möchte nun diese Nullen vor Beginn einer weiteren Analyse entfernen lassen. Hierbei sollen aber echte Nullen von Messwerten unangetastet bleiben (im oberen Beispiel der vorletzte Eintrag von v_mess).

Das Ziel ist also wieder ein v_mess von:
Code:

v_mess=[230 231 NaN NaN 232 233 0 231]
 


Wie kann ich diese Nullen am Anfang entfernen?
Es können zwischen keiner und 4 Nullen am Anfang entstehen.

Mein erster Ansatz hierzu ist der nonzeros Befehl :

Code:

v_ohne_Nullen=nonzeros(v_mess(:,1) )
 


Problem bei diesem Befehl ist nur das alle Nullen entfernt werden und nicht nur die zu Beginn der Aufzeichnung.
Im Vektor v_kontroll können nur Nullen zu Beginn entstehen, weil die nachfolgende Zählvariable immer hochzählt wird und dazwischen keine Null entstehen kann.

Ich hoffe ihr könnt mir helfen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Seban
Forum-Meister

Forum-Meister


Beiträge: 600
Anmeldedatum: 19.01.12
Wohnort: ---
Version: ab R2014b
     Beitrag Verfasst am: 12.11.2014, 15:35     Titel:
  Antworten mit Zitat      
Hallo,

Matlab_User85 hat Folgendes geschrieben:

Die Anzahl der vorangestellten Nullen des Messvektors v_mess und des Kontrollvektors v_kontroll sind identisch.
...

Code:

v_ohne_Nullen=nonzeros(v_mess(:,1) )
 

Problem bei diesem Befehl ist nur das alle Nullen entfernt werden und nicht nur die zu Beginn der Aufzeichnung.
Im Vektor v_kontroll können nur Nullen zu Beginn entstehen, weil die nachfolgende Zählvariable immer hochzählt wird und dazwischen keine Null entstehen kann.

Dann wende den zitierten Code doch auf v_kontroll statt v_mess an und nutze den so entstandenen vektor, um noch die Länge von v_mess anzupassen.

Alternativ mit logischem Vektor:
Code:
log = v_kontroll > 0;
a = v_mess(log);
b = v_kontroll(log);


Grüße
_________________

Richtig fragen
Debugging
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_User85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.11.2014, 15:58     Titel:
  Antworten mit Zitat      
Vielen Dank Seban! Funktioniert Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
Matlab_User85
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 36
Anmeldedatum: 03.11.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.12.2014, 14:02     Titel:
  Antworten mit Zitat      
Im Rahmen meiner Auswertung bekomme ich meistens Vektoren unterschiedlicher Länge. Damit ich jedoch die Verläufe gemeinsam in einem Bild plotten kann, muss ich die Vektoren immer von Hand kürzen.

Ich möchte deshalb gern von meinem erstellten Messvektor nur zum Beispiel die ersten 500 Einträge erhalten.

Wünschenswert wäre eine Bildschirmabfrage, wo ich jedes mal eingeben kann, wieviel Einträge des Vektors ich einlesen möchte.

Ist sowas möglich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.