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

Suche Datenstruktur, um Resultate+Metadaten zu speichern

 

Levin
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2020, 07:10     Titel: Suche Datenstruktur, um Resultate+Metadaten zu speichern
  Antworten mit Zitat      
Hallo,

Mein Skript analysiert Messwert-Dateien (>1000 Dateien) in Abhängigkeit der Metadaten der Datei mit jeweils unterschiedlichen Methoden. Ich suche nun eine geeignete Datenstruktur, um die Resultate+Metadaten der jeweils analysierten Datei abzuspeichern, sodass ich im Nachgang z.B. den Durchschnitt (u.a.) der Resultate, die die gleichen Metadaten aufweisen, berechnen kann. Pro analysierter Datei werden 3-5 Kennwerte (in Abhängigkeit der gewählten Methode) und 1 Vektor (Länge>1e5) berechnet, zudem 4 Metadatenwerte. Ich habe mir überlegt, einen structure array zu nutzen, also etwas in der Form:
Code:
results=struct
results.metadata=struct
results.metadata.metaval1='val'
results.results=struct
results.results.resultsType1=val

und dann die Ergebnisse einer Metadatengruppe 'group1' wie folgt zu filtern:
Code:
idx = strcmp('val1',{results.metadata.metaval1}) & strcmp('val2',{results.metadata.metaval2}) & strcmp('val3',{results.metadata.metaval3}) & strcmp('val4',{results.metadata.metaval4}) ;
group1_resultType1 = results(idx).resultType1;


Hat jemand vlt Verbesserungsvorschläge? Zb, vlt eine andere Datenstruktur als struct-arrays, oder eine bessere Idee, die Resultate+Metadaten anzuordnen, um später einfacher darauf zugreifen zu können, und damit weitere Berechnungen anzustellen.
thx!
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2020, 10:56     Titel:
  Antworten mit Zitat      
Hallo,

das Struct Array ist ein sinnvoller Ansatz.
In der Abfrage meinst du vermutlich | statt &. Deutlich einfacher ginge die Abfrage mit ismember. Ich würde mir auch Strings ansehen. Die sind in vielerlei Hinsicht angenehmer in der Handhabung als char Arrays.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Levin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2020, 11:25     Titel:
  Antworten mit Zitat      
Hallo,

Danke für das schnelle Feedback und den Tip mit den Strings!

Ich habe '& ' benutzt (vielleicht irre ich mich auch!), da jede Datei immer 4 Metadatenparameter ausgeben muss. Es müssen also alle 4 Metadaten-'Variablen' einen Wert zugeordnet bekommen; Dateien einer Gruppe müssen in allen 4 Metadaten-Parametern übereinstimmen (sie unterscheiden sich lediglich im Messdatum, dass ich in ein 5. Metadaten-Feld abspeichern würde).

Viele Grüße
Levin
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 31.10.2020, 11:33     Titel:
  Antworten mit Zitat      
Hallo,

sorry, ich hatte übersehen, dass metavaln hochgezählt wird. Dann brauchst du in der Tat &. Strings sollten dennoch helfen, da du dann statt strcmp == verwenden kannst.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Levin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.10.2020, 11:40     Titel:
  Antworten mit Zitat      
Hallo,

Vielen Dank, die Tips machen das Abspeichern besser! Smile

Viele Grüße

Levin
Private Nachricht senden Benutzer-Profile anzeigen
 
Levin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2020, 17:43     Titel:
  Antworten mit Zitat      
Hallo!

Jetzt habe ich nochmal ein Problem: in meine results-structure wird für i=1 , der Wert überschrieben, sobald ich eine Iteration (i=2) weitergehe. Also, save2struct(1,"f1","Caco2","37","0.05","up") fügt alles korrekt in metadata ein, aber für save2struct(2,"f2","Caco2","37","0.05","up") wird results.metadata überschrieben.

Ich habe leider gerade Tomaten auf den Augen: vielleicht kann mir jemand weiterhelfen, auch für den Fall, dass man die Funktion etwas eleganter schreiben könnte!

Code:
function save2struct(i,sampleType,cellType,temperature,concentration,...
                     experimentType)
list=dir('*.mat');
list_filename={list.name};
if isempty(strcmp(list_filename,'results.mat'))==1
    load results
    results(i).metadata.sampleType=sampleType
    results(i).metadata.cellType=cellType;
    results(i).metadata.temperature=temperature;
    results(i).metadata.concentration=concentration;
    results(i).metadata.experimentType=experimentType;
else
    results=struct;
    results.metadata=struct;
    results.results=struct;
    results.metadata.sampleType=struct;
    results.metadata.cellType=struct;
    results.metadata.temperature=struct;
    results.metadata.concentration=struct;
    results.metadata.experimentType=struct;
    results(i).metadata.sampleType=sampleType
    results(i).metadata.cellType=cellType;
    results(i).metadata.temperature=temperature;
    results(i).metadata.concentration=concentration;
    results(i).metadata.experimentType=experimentType;
end
save('results.mat','results')
end


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

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2020, 18:13     Titel:
  Antworten mit Zitat      
Hallo,

es lag daran, dass 'results.mat' nicht geladen wurde, ich habe nun die if-condition ersetzt:

Code:
isempty(find(ismember(list_filename,'results.mat')==1))==0


bestimmt nicht die beste Lösung, aber es funktioniert.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2020, 18:14     Titel:
  Antworten mit Zitat      
Hallo,

ich würde das im Debugging-Modus durchgehen. Meine Vermutung ist, dass das Problem
Code:
isempty(strcmp(list_filename,'results.mat'))==1


strcmp sollte ja einen true/false-Vektor zurückgeben. Welchen Sinn macht es, darauf isempty anzuwenden? Das wird ja nie leer sein. Wenn, dann müsste man eher
Code:
~any(strcmp(list_filename,'results.mat'))

verwenden?
Wenn du wissen willst, ob es eine results.mat gibt, ist der einfachste Weg isfile , alternativ exist .

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Levin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 02.11.2020, 18:27     Titel:
  Antworten mit Zitat      
Hallo!

Ja, mit isfile ist es der beste Weg:
Code:
if isfile('results.mat')==1


Vielen Dank!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.11.2020, 21:27     Titel:
  Antworten mit Zitat      
Hallo,

das "==1" kannst du auch weglassen. :)

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Levin
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 27.09.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.11.2020, 07:21     Titel:
  Antworten mit Zitat      
Hallo!

Perfekt, danke Smile, dann hab ich wohl mit Kanonen auf Spatzen geschossen Smile Smile

Viele Grüße
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.