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 mit Hilfe if aus Mat-File löschen

 

JaSoIstEs
Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.04.2015, 12:47     Titel: Daten mit Hilfe if aus Mat-File löschen
  Antworten mit Zitat      
Hallo,

habe eine .mat File die wie folgend aussieht:

Inhalt Mat-File
______________
Nary 31x1 double
OPmtx 1x23 cell
Pary 1x6001 double
Tary 31x1 double
______________

Und in OPmtx sind meine ganzen "Pakete" mit den Ergebnissen meiner Berechnungen.

Und jede Zeile in diesen "Paketen" entspricht einer Messung mit ca. 50 Werten.

Was ich gerne machen will es aber nicht so klappt ist das in jeder Zeile
geprüft wird ob der Wert in Spalte 40 kleiner ist als in 42 wenn nicht dann soll die ganze Zeile gelöscht werden.

Ich glaube nicht das die Lösung so schwer ist aber ich bekomme es einfach nicht so richtig hin Embarassed

Danke im Voraus.
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.04.2015, 13:19     Titel:
  Antworten mit Zitat      
was hast du denn bis jetzt versucht und welche fehler sind aufgetreten ?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.04.2015, 13:39     Titel:
  Antworten mit Zitat      
Wenn ich ehrlich bin weiß ich nicht mal so recht wie ich bei so einer Verschachtelung auf die einzelnen Daten zugreifen kann.

Bzw. weiß ich nicht so recht wie ich das ganze auf eine n-Anzahl von Daten machen kann.



Code:


if OPmtx{1}(1,40) > OPmtx{1}(1,42)

   OPmtx{1}(1,:) = [];

end

 


Ich brauche wahrscheinlich mindestens zwei for-Schleifen oder ?
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.04.2015, 14:07     Titel:
  Antworten mit Zitat      
ich denke eine forschleife ist ausreichend
Code:
% beispieldaten erzeugen
for kk=1:23
OPmtx{kk}=randi(100,100,50); % 100 messungen mit 50 werten
end
for jj=1:numel(OPmtx)
    OPmtx{jj}(OPmtx{jj}(:,40) >= OPmtx{jj}(:,42),:)=[];  
end
 

man kann es auch ohne schleife lösen denke ich aber darüber kann man sich dann gedanken machen wenn diese schleife einen großteil der rechenzeit frisst Wink
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.04.2015, 14:30     Titel:
  Antworten mit Zitat      
Hallo,

danke für den raschen Lösungsvorschlag.

Aber anscheinend läuft da was schief...

Wenn ich deinen Code jetzt verwende passiert aus z.B. OPmtx{1}
wird aus 31x45 --> 1x1364 wird...
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.04.2015, 14:34     Titel:
  Antworten mit Zitat      
Zitat:
Wenn ich deinen Code jetzt verwende passiert aus z.B. OPmtx{1}
wird aus 31x45 --> 1x1364 wird...

da mein code das nicht macht und deiner schon wäre es hilfreich wenn du den code postest der das verursacht Smile irgendwie scheinst du es ja anders zu machen.
bitte poste ein lauffähiges beispiel das deinen fehler reproduziert.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.04.2015, 14:52     Titel:
  Antworten mit Zitat      
Oh sorry,

hab es mit deinem hin bekommen...

mein Fehler... Embarassed .

Vielen Dank.

Habe aber nebenbei auch mal versucht selber den Code zu schreiben.

Code:

for i=1:length(OPmtx)
     
     for j = 1:size(OPmtx{i},1)
         
         if OPmtx{i}(j,1) > OPmtx{i}(j,2)
             
             OPmtx{i}(j,:) = [];
             
         end

     end
     
end
 


Der Code macht eigentlich was er soll nur irgendwann bekomme ich den Fehler "Index exceeds matrix dimensions"

Ich weiß das sich i und j hier beißen was eigentlich auch dumm von mir ist das so zu schreiben. Trotzdem würde ich gerne wissen ob die Möglichkeit gibt das was ich geschrieben habe zu laufen zu bringen ?


Und noch eine Frage =)
Wenn das jetzt da durchgelaufen ist und ich die Daten bearbeitet habe,
wie speichere ich das ganze wieder in die selbe Mat-File ?
Also Ohne das ich wieder alles zuweisen muss.

Code:

save([WorkingDir, '\', filename, '_SimRes.mat'], 'OPmtx','Nary','Tary','Pary')
 
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.04.2015, 15:25     Titel:
  Antworten mit Zitat      
Zitat:
Der Code macht eigentlich was er soll nur irgendwann bekomme ich den Fehler "Index exceeds matrix dimensions"

anscheinend also nicht Smile
Zitat:
Ich weiß das sich i und j hier beißen was eigentlich auch dumm von mir ist das so zu schreiben.

was meinst du damit? i und j sind die imaginären einheiten und sollten deswegen nicht als laufvariablen verwendet werden
Zitat:
"Index exceeds matrix dimensions"
das heist das du versuchst auf elemente zuzugreifen die es nicht gibt. so etwas lässt sich sehr leicht mit dem debugger rausfinden. ich kann immer nur empfehlen den zu benutzen Smile
Code:

ich würde nicht length nehmen. length gibt immer die größte dimension aus und das ist nicht immer die die man haben will. ich würde size mit dimmensionsangabe verwenden wie du es auch in deiner zweiten schleife gemacht hast. oder auch numel.
Code:
for j = 1:size(OPmtx{i},1)

eigendlich richtig aber das problem ist das du innerhalb deiner schleife die größe der matrix änderst. das führt zu dem auftretendem fehler.
eine while schleife könnte hier helfen.
beim zweiten teil muss ich auch erst in der doc lesen. also guck dir einfach mal
Code:
an.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 28.04.2015, 17:54     Titel:
  Antworten mit Zitat      
Ich mach das jetzt so:

1) Laden
2) bearbeiten
3) wieder speichern

funktioniert so. Very Happy

Aber eine andere Frage zu dem ursprünglichen Problem.

Wenn ich die ganzen Zeilen nicht löschen will sondern alles mit Null oder NaN ersetzen will bis auf die erste Spalte wie würde man das dann schreiben ?

Code:

load ([WorkingDir, '\', filename, '_SimRes.mat']);

for jj=1:numel(OPmtx)

    OPmtx{jj}(OPmtx{jj}(:,40) > OPmtx{jj}(:,42),:) = 0;

end

save([WorkingDir, '\', filename, '_SimRes.mat'], 'OPmtx', 'Nary', 'Tary', 'Pary')
 


Das war dann auch die letzte Frage... Embarassed

Vielen vielen Dank für deine Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 28.04.2015, 18:03     Titel:
  Antworten mit Zitat      
na wenn du nicht alles umschreiben willst sondern nur bereich must du ihm halt den bereich geben
Code:
for jj=1:numel(OPmtx)

    OPmtx{jj}(OPmtx{jj}(:,40) > OPmtx{jj}(:,42),2:end) = 0;

end
 

_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
JaSoIstEs
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 266
Anmeldedatum: 01.10.12
Wohnort: Hessen
Version: 2019b
     Beitrag Verfasst am: 29.04.2015, 09:37     Titel:
  Antworten mit Zitat      
Vielen Dank für deine Hilfe. Very Happy
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.