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

Zwei Strukturen zusammenfügen

 

Tanja1506

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 16:57     Titel: Zwei Strukturen zusammenfügen
  Antworten mit Zitat      
Hallo,

nach meiner Datenanalyse habe ich eine sog. "res" - Struktur. Da ich an verschiedenen Tagen Daten erhoben habe, habe ich insgesamt 4 dieser "res"-Strukturen. Für weitergehende Analyse möchte ich aber gerne alle Daten gleichzeitig angucken. Am besten wäre es deshalb, wenn ich die Strukturen in einer zusammenfügen könnte.

Ich habe schon andere Recherche im Internet betrieben und bin auf folgenden Link gestoßen:
http://blogs.mathworks.com/loren/20.....15/concatenating-structs/

Das sieht ja erstmal toll aus, nur leider würde es bei mir an dem "unique"-Befehl scheitern, da alle Strukturen ja die gleichen Informationen enthalten.

Hat jemand sonst vielleicht noch eine Idee? Ich könnte es als Zelle versuchen, aber das würde alles kompliziert machen, oder?

Besten Dank schon mal im Voraus,
Tanja


flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 17:41     Titel:
  Antworten mit Zitat      
In Deinem verlinkten Artikel steht:
Zitat:
Next, I ensure the fieldnames are unique.


Wenn Deine Strukturen identisch sind, dann kann man sie mit der genannten Methode zusammenfügen, denn gleiche Feldnamen sollen ja zusammen geführt werden. Bei unterschiedlichen Feldnamen kannst Du Dein Struct einfach um das entsprechende Feld ergänzen
Private Nachricht senden Benutzer-Profile anzeigen
 
Tanja1506

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 17:59     Titel:
  Antworten mit Zitat      
Leider nicht.

In dem Beispiel geht es darum, dass die Struktur, die Name und Alter enthält mit der, die die Größe enthält zusammengefügt wird. Also nicht beide Namen und Alter zusammenfügen, sondern die Strukturen mit unterschiedlichen fieldnames.

Ich habe das Beispiel natürlich auch schon ausprobiert und bekomme beim letzten Schritt (cell2struct) folgende Fehlermeldung:

Error using cell2struct
Duplicate field name "trode"

Und außerdem verstehe ich den Vorteil von dieser Zeile in dem Beispiel nicht:

Next, I ensure the fieldnames are unique.
ufn = length(fn) == unique(length(fn))

length(fn) hat natürlich nur eine Zahl, darum ist es klar, dass wenn ich dann nach der unique Zahl frage, der Befehl mit "1", also "wahr" herauskommt. Aber das sagt mir ja eigentlich nicht viel. Außer, dass length mir eine Zahl gibt...

Danke,
Tanja
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 18:15     Titel:
  Antworten mit Zitat      
Ich sehe das Problem nicht, es geht doch:
Code:

s1.a = 5;
s1.b = 'xxx';

s2.c = [123 456];

s1.c = s2.c;
 


Die Feldnamen kann man auch automatisch übernehmen mit Hilfe der dynamischen Feldnamen
Private Nachricht senden Benutzer-Profile anzeigen
 
Tanja1506

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 18:43     Titel:
  Antworten mit Zitat      
Vielleicht hätte ich mich verständlicher ausdrücken müssen. Ich möchte gerne so etwas ähnliches wie HORZCAT oder VERTCAT für Strukturen haben.
Ich habe 4 Strukturen mit jeweils 5 Feldern mit den gleichen Feldnamen. Die Daten, die in der Struktur stehen, sollen in einer neuen Struktur zusammengefügt werden. Also quasi:

s1.a = [1 2 3 4 5]

s2.a = [5 4 3 2 1]

s.a = [1 2 3 4 5 5 4 3 2 1]

Das Hauptproblem ist jetzt, dass ich nicht nur mit Vektoren und Matrizen umgehe, sondern einige Felder noch mal Strukturen enthalten:

Um es konkreter zu machen: Eine einzelne Struktur sieht so aus:

trode: [1x96 struct]
trialDurAdjust: [541x4 int32]
filename: 'beispiel.mat'
aPeriod: [1x4 struct]
fanoTrodeUnit: [243x2 uint8]

Und das ganze habe ich insgesamt vier mal.

Wie kann ich am Ende mit z.B.
trode: [4 x 96 struct]
enden?

Danke!
 
flashpixx
Forum-Guru

Forum-Guru


Beiträge: 355
Anmeldedatum: 19.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 19:59     Titel:
  Antworten mit Zitat      
Tanja1506 hat Folgendes geschrieben:
Vielleicht hätte ich mich verständlicher ausdrücken müssen. Ich möchte gerne so etwas ähnliches wie HORZCAT oder VERTCAT für Strukturen haben.

s1.a = [1 2 3 4 5]

s2.a = [5 4 3 2 1]

s.a = [1 2 3 4 5 5 4 3 2 1]


Das entspricht genau Deinem Link.
Private Nachricht senden Benutzer-Profile anzeigen
 
Tanja1506

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 20:03     Titel:
  Antworten mit Zitat      
Nein, weil der Link Felder mit unterschiedlichen Namen zusammenfügt, nicht mit gleichen Namen.

Loren speichert die Struktur mit dem Feld 'Height' in die gleiche Struktur, die schon 'Name' und 'Age' enthält. 'Name' und 'Age' bleiben weiterhin getrennt.

Deswegen die Zeile mit dem 'unique'-Befehl
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 11.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 21:10     Titel:
  Antworten mit Zitat      
Hallo Tanja,

so ganz habe ich noch nicht verstanden wie die gemeinsame Struktur dann aussehen soll.
trode: [1x96 struct] -> [4x96]
trialDurAdjust: [541x4 int32] -> [2164x4] ???
filename: 'beispiel.mat' -> [4x12 char] ???
aPeriod: [1x4 struct] -> [4x4]
fanoTrodeUnit: [243x2 uint8] -> [972x2] ???

Für mich machen die verschied großen Matrizen, und das zusammenhängen von filename
noch keinen richtigen Sinn.
horzcat und vertcat kannst Du auch auf einzelne Struct-Felder anwenden:
Code:
s.trode=vertcat(s1.trode, s2.trode, s3.trode, s4.trode);

Das für jedes Feld von Hand zu schreiben, scheint mir für Deinen Fall die einfachste
Lösung.

Grüße
Sirius
Private Nachricht senden Benutzer-Profile anzeigen
 
Tanja1506

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 21:14     Titel:
  Antworten mit Zitat      
Hi Sirius,

ja, mir ist aufgefallen, dass ich das wohl vermutlich alles von Hand machen muss. Ich wandle es jetzt in Zellen um, und greife dann auf die Indexe mit for-loops zu. Ich hatte gehofft, es gäbe eine elegantere Lösung aber irgendwie geht es ja immer Wink

Danke dennoch und einen schönen Abend,
Tanja
 
Tanja1506

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.06.2012, 21:15     Titel:
  Antworten mit Zitat      
Dieses Thema hat sich für mich dann hier auch erstmal erledigt. Gute Nacht
 
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.