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

For-Schleife in Verbindung mit Zellen aus Strings und Zahlen

 

KaiS
Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 10:54     Titel: For-Schleife in Verbindung mit Zellen aus Strings und Zahlen
  Antworten mit Zitat      
Hallo zusammen,

ich habe eine Zelle vorliegen, die folgendermaßen aussieht:

test =

'F' 'D' 'A' 'B' 'C' 'E'
[1] [2] [3] [3] [3] [4]

D.h. in der ersten Zeile haben wir Strings, denen in der zweiten Zeile Gruppennummern zugeordnet sind. Es sind also 4 Gruppen vorhanden.

Zusätzlich habe ich ein Struct-Array namens "net.letter", welches den Buchstaben A bis F aus Matrix "test" die Zahlen von 1 bis 6 zuordnet, d.h. A bekommt die 1 zugewiesen, B die 2, usw.. Hierfür ist net.letter nochmal unterteilt in net.letter.indices für die zugeordneten Zahlen und net.letter.id für die entsprechenden Buchstaben.

Nun möchte ich gerne in einer Zelle "cell" für jede Gruppe die Teilnehmer reinschreiben (entsprechend ihrer zugeordneten Nummer).

Wenn ich also z.B. cell{3}(2) (d.h. 3. Gruppe, 2. Element) eingebe, sollte mir Matlab als Ergebnis 2 herausgeben, da 2 die Zahl ist, die "B" zugewiesen wurde.

Diese Zelle würde ich nun gerne automatisiert beschreiben lassen (für den Fall, dass sich z.B. mal was an der Größe von "test" ändern sollte).

Habe dafür ein paar for-Schleifen benutzt, die mir aber nicht das richtige Ergebnis bringen.

Code:
for f = 1:k %k ist die Anzahl von Gruppen, hier also 4
        for g = 1:length(test)
            for h = 1:length(net.letter)
                if(strcmp(test{1,g},net.letter(h).id))
                    cell{f} = [net.letter(h).index];
                end
            end
        end
end


Als Ergebnis müsste eigentlich herauskommen:

cell =

{[6] [4] [1 2 3] [5]}

Kann da jmd von euch vllt mal drüberschauen? Wäre toll!

Danke!

LG
Kai
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: 07.03.2013, 12:07     Titel:
  Antworten mit Zitat      
Hallo Kai,

So scheint es zu funktionieren:
Code:
test = {'F' 'D' 'A' 'B' 'C' 'E'; ...
    [1] [2] [3] [3] [3] [4]};
net.letter.indices = 1:6;
net.letter.id = {'A' 'B' 'C' 'D' 'E' 'F'};

grp_nr = cell2mat(test(2, :));
idx = zeros(1, length(test));

for g = 1:size(test, 2)
    for h = 1:length(net.letter.id)
        if(strcmp(test{1,g},net.letter.id{h}))
            idx(g) = net.letter.indices(h);
        end
    end
end
zelle{1} = idx(grp_nr == 1);
zelle{2} = idx(grp_nr == 2);
zelle{3} = idx(grp_nr == 3);
zelle{4} = idx(grp_nr == 4);


Dabei hat mir übrigens der Debugger geholfen Wink
http://www.mathworks.de/de/help/mat.....process-and-features.html

Beste Grüße,
Seban
Private Nachricht senden Benutzer-Profile anzeigen
 
KaiS
Themenstarter

Forum-Century

Forum-Century


Beiträge: 102
Anmeldedatum: 19.04.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 07.03.2013, 14:18     Titel:
  Antworten mit Zitat      
Hi Seban,

super, vielen Dank, es funktioniert!

Eine Frage aber noch zum Code:

Code:
zelle{1} = idx(grp_nr == 1);


Was für eine Operation ist denn idx(... == ...)? Hab ich entweder noch nie gesehen oder ich steh einfach grad total aufm Schlauch..

Danke!

LG
Kai
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: 07.03.2013, 17:08     Titel:
  Antworten mit Zitat      
Gerne.

Code:
grp_nr == 1

== ist ein Vergleichsoperator und gibt eine logische Matrix zurück. In diesem Fall heißt das: Überall wo grp_nr gleich 1 ist, steht in der logischen Matrix eine (logische) 1, überall sonst eine 0.
http://www.mathworks.de/de/help/mat...../relationaloperators.html
http://blogs.mathworks.com/steve/2008/01/28/logical-indexing/

Code:
idx(grp_nr == 1)

Hier werden alle Werte von idx ausgegeben, für die diese Bedingung erfüllt ist. (Die beiden Vektoren müssen natürlich gleich groß sein)

Deutlicher wird es vielleicht so:
Code:
log_grp = grp_nr == 1
idx(log_grp)


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