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

mehrfach find in cell Array

 

StV0l
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2013, 06:21     Titel: mehrfach find in cell Array
  Antworten mit Zitat      
Hallo,

Ich habe eine kleine Frage zu folgender Datenstruktur:
Code:

matrix = cell(1,10);
matrix{1}.letter = 'S';
matrix{1}.dotMatrix = %Matrix die den Buchstaben als 7x5-Dot-Matrix darstellt
matrix{2}.letter = 'H';
matrix{2}.dotMatrix = ...
 

u.s.w.

Auf diese Art und weise speichere ich mehrere Buchstaben in das CellArray Matrix.
Um mir jetzt ein Wort als Dot-Matrix anzeigen zu lassen, möchte ich gerne mit einer Art find Operation einen String oder ein CharArray übergeben können und dabei die Indizes der entsprechenden Einträge in der Matrix zurück bekommen.
Meine generelle Frage ist eigentlich, ob das ganze ohne Schleife möglich ist. Denn mit Schleife kann ich ja die einzelnen Elemente meines übergebenen Strings durchiterieren und mittels strcmp den passenden index heraussuchen.

Über Gedankenanstöße freue ich mich,
Gruß
Stephanus
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

warum verwendest du ein Cell Array von Strukturen statt einem Struktur-Array?

Soll in letter, in dotmatrix oder in beiden gesucht werden?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
StV0l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2013, 10:37     Titel:
  Antworten mit Zitat      
gesucht werden soll in letter. letztendlich brauche ich aber natürlich auch Zugriff auf dotMatrix um mir die gesamte dotMatrix der Anzeige zusammenzusetzen.

Mit einem StructArray habe ich es auch schon probiert, da schien mir die Indezierung aber noch komplizierter. Wenn es damit eine einfache Lösung gibt, wäre das natürlich super.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wie wärs damit?
Code:
matrix(1).letter = 'S';
matrix(1).dotMatrix = rand(7,5)
matrix(2).letter = 'H';
matrix(2).dotMatrix = rand(7,5)

idx = arrayfun(@(s) strcmp(s.letter, 'S'), matrix);
matrixS = matrix(idx)

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
StV0l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2013, 11:13     Titel:
  Antworten mit Zitat      
Vielen Dank, das ist schon mal super. So ähnlich, aber etwas umständlicher hatte ich es schon.
Das i-Tüpfelchen wäre jetzt, wenn ich eben nicht nur auf einen einzelnen Buchstaben testen kann, sondern direkt den String angeben kann. Etwa so:
Code:

matrix(1).letter = 'S';
matrix(1).dotMatrix = rand(7,5)
matrix(2).letter = 'H';
matrix(2).dotMatrix = rand(7,5)

idx = arrayfun(@(s) strcmp(s.letter, 'SH'), matrix);
% idx  sollte jetzt alle Indizes der gewünschten Buchstaben enthalten
 

Aber das ist wahrscheinlich nur mit einer Schleife möglich, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

bitte genau erklären, was du willst.

Willst du tatsächlich 'SH' haben, oder " 'S' oder 'H' "?
Soll der String vorkommen oder soll er gleich sein?

Das alles lässt sich ohne for-Schleife machen, aber man muss halt erst mal wissen, was genau gemacht werden soll.

Grüße,
Harld
Private Nachricht senden Benutzer-Profile anzeigen
 
StV0l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2013, 11:32     Titel:
  Antworten mit Zitat      
Hallo,

ich möchte wirklich in diesem Falle genau 'SH' haben. In dieser Reihenfolge und nicht entweder oder. Der Rückgabewert soll dann also auch die Indizes der Matrix in der richtigen Reihenfolge enthalten.
Möglich Sollte auch sein, dass ein Buchstabe doppelt vorkommt. Am Beispiel:
Code:

matrix(1).letter = 'S';
matrix(1).dotMatrix = rand(7,5)
matrix(2).letter = 'H';
matrix(2).dotMatrix = rand(7,5)

idx = arrayfun(@(s) strcmp(s.letter, 'SHS'), matrix);
% idx  sollte jetzt die Indizes 1,2,1 enthalten
 


Vielen Dank für die schnelle Hilfe hier.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann so:
Code:
suchstring = 'SHS';
findaletter = @(letter) find(arrayfun(@(s) strcmp(s.letter, letter), matrix))
allletters = arrayfun(findaletter, suchstring)


Dies allerdings unter der Anname, dass die letter-Felder nicht mehrfach gleich belegt sind.

Wenn der Suchstring lang ist, kann man natürlich auch einmal schauen, welches Zeichen welchem Index entspricht, und dann damit arbeiten.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
StV0l
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 06.06.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.10.2013, 12:17     Titel:
  Antworten mit Zitat      
Super! Vielen Dank. Ist zwar nur noch grenzwertig lesbar, aber macht was es soll Smile

Gruß
Stephanus
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.10.2013, 17:00     Titel:
  Antworten mit Zitat      
Hallo StV0l,

was Du suchst ist ismember:
Code:

matrix = struct();
matrix(1).letter = 'S';
matrix(1).dotMatrix = [1,2];
matrix(2).letter = 'H';
matrix(2).dotMatrix = [7,2];

[~,idx]=ismember('SHS',[matrix.letter])
 
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.