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

Daten zeilenweise aus Struct löschen

 

PelleLovesPeace
Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.09.2017, 13:07     Titel: Daten zeilenweise aus Struct löschen
  Antworten mit Zitat      
Hallo!

Ich habe ein kleines Schleifen/Index-Problem und hoffe auf Hilfe!

In einem Vektor Blink (378x1 double) habe ich Nullen und Einsen stehen. Wobei Null heißt, der Wert soll gestrichen werden und 1 heißt, der Wert kann bleiben.

Nun habe ich zwei structs in denen jeweils mehrere 3D Variablen mit korrespondierenden Frames stehen. Heißt also: in einem struct sind z.B. 4 Variablen als 378x4 doubles. In dem anderen struct sind es 8 Variablen mit 378x4 doubles.

Nun möchte ich jedes Mal, wenn in Blink eine 0 steht alle Zeilen mit korrespondierendem Frame aus jeder Variable der structs löschen. Ich habe auch einen Zähler eingebaut, der angibt wie oft die Nullen auftreten. Bisher bin ich so weit gekommen:

Code:
 Blink = zeros(Datalength,1); % erstmal nur erstellen von Blink mit 1&0
  for i = 1 : Datalength
    if AugenAbstandWelt(i) < MWAugenAbstandWelt
        Blink(i) = 0;
    else if AugenAbstandWelt(i) > MWAugenAbstandWelt
            Blink(i) = 1;
        end
    end
end
Nullen = sum(length(Blink)) - sum(Blink); % wie viele Werte müssen raus
namesWelt = fieldnames(Welt);
namesMarker = fieldnames(Marker);
for j = 1 : Datalength % Nullen im ersten struct löschen
    if Blink(j) == 0
        for k = 1 : length(namesWelt)
            Name1 = namesWelt{k};
            Welt.(Name1)(j,:) = [];
         end
    end
end
for l = 1 : Datalength % Nullen im zweiten struct löschen
    if Blink(l) == 0
        for m = 1 : length(namesMarker)
            Name2 = namesMarker{m};
            Marker.(Name2)(l,:) = [];
        end
    end
end
% neue Datenlänge
Datalength = length(Welt.BlickVek_R);


Das Programm erkennt richtig, wo Nullen stehen und löscht auch die gleiche Anzahl an Zeilen aus den jeweiligen Variablen der structs, allerdings scheine ich mich irgendwie mit den Zählern (i,j,k,l) zu verzetteln, da hinterher bis auf die erste gelöschte Nullzeile noch falsche Werte in meinen Variablen vorhanden sind.

Findet jemand den Fehler und kann mir helfen?

Danke im Voraus!
Private Nachricht senden Benutzer-Profile anzeigen


PelleLovesPeace
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 15
Anmeldedatum: 30.11.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.09.2017, 15:02     Titel:
  Antworten mit Zitat      
Das Problem ist mittlerweile gelöst!

Der Index muss von hinten nach vorne laufen also z.B.:

Code:
[code]
for f = Datalength : -1 : 1
...
end[/code]


Dadurch rücken die Werte nicht immer weiter vor, wenn der vorherige gelöscht wurde...vielleicht hilft es ja noch jemandem
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 - 2024 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.