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

Indices finden

 

Weta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2011, 17:24     Titel: Indices finden
  Antworten mit Zitat      
Hallo!

Ich habe ein 500 x 3 char-Matrix namens 'T'.
Ich möchte nun alle Indizes (entweder als Zahlen oder als 1/0 Vektor) von 'T' finden, für die die Zeile gleich 'WWW' ist.

ich versuche es irgendwie mit T(:,Smile == 'WWW' aber das passt von den Dimensionen anscheinend nicht. Mir ist nicht ganz klar warum und wie ich es besser machen kann?

Gruß,
Weta


Harald
Forum-Meister

Forum-Meister


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

Code:
all(T, 2) == 'W'


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.09.2011, 21:08     Titel:
  Antworten mit Zitat      
Hallo Harald!

Danke, deine Lösung funktioniert, aber:

1. verstehe ich sie nicht. 'all(T,2)' testet ja, ob bei T alle Elemente entlang der 2.Dimension verschieden von 0 sind. Da kommt doch logisch 1 oder 2 raus, und wie kann ich das dann mit 'W' vergleichen?

2. Funktioniert die Lösung ja so leider nur, wenn ich nach drei gleichen Buchstaben suche. Auf z.B. 'ABC' ist sie leider nicht übertragbar, was ich aber auch bräuchte Sad
 
Harald
Forum-Meister

Forum-Meister


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

mich würde es erstaunen, wenn meine Lösung funktionieren würde.
Sorry, ein Schreibfehler - es müsste korrekt heißen:
Code:
all(T == 'W', 2)


Allgemeiner würde das funktionieren:
Code:


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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.09.2011, 18:14     Titel:
  Antworten mit Zitat      
Hi Harald,

gut, das funktioniert, ist nur relativ langsam.
Folgende Lösung habe ich gefunden, die schneller ist, allerdings weniger elegant aussieht Smile

Code:
full(T(:,1)=='W') .* full(T(:,2)=='W') .* full(T(:,3)=='W')


Wofür hier genau das "full" benötigt wird, ist mir jedoch auch nicht klar...
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 12.09.2011, 22:14     Titel:
  Antworten mit Zitat      
Hallo Weta,

Zitat:
gut, das funktioniert, ist nur relativ langsam.

Langsam? 2.3 GHz Core2Duo, Matlab 2009a:
Code:
z = all(T == 'W');
% 0.0000137 Sekunden

z = full(T(:,1)=='W') .* full(T(:,2)=='W') .* full(T(:,3)=='W')
% 0.0000302 Sekunden
 

Das "full" wird genau genommen gar nicht benötigt, darum kann man es auch einfach weglassen.
Ich würde also Haralds Methode bevorzugen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Weta

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2011, 08:02     Titel:
  Antworten mit Zitat      
Hallo Jan,

nein, ich meinte diese Lösung:
Code:

Da ich ja auch Strings, die aus verschiedenen Buchstaben bestehen, suchen muss.

Und bei mir funktioniert
Code:
T(:,1)=='W' .* T(:,2)=='K' .* T(:,3)=='W'

nicht. Da kommen nur nullen raus, verwende ich noch "full" kommt das richtige Ergebnis raus Question
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.09.2011, 10:53     Titel:
  Antworten mit Zitat      
Hallo Weta,

Zitat:
Und bei mir funktioniert
Code:
T(:,1)=='W' .* T(:,2)=='K' .* T(:,3)=='W'

nicht. Da kommen nur nullen raus, verwende ich noch "full" kommt das richtige Ergebnis raus

Das ist merkwürdig. FULL wandelt eine SPARSE Matrix in eine normale Matrix um. Allerdings verwendest Du überhaupt keine SPARSE-Matrizen, sondern eine CHAR-Matrix, die immer FULL ist.
Eventuell liegt Dein Problem am 'K'? Die zweite Spalte sollte auch 'W' sein, oder?

Eine alte aber sehr wichtige Regel beim Programmieren: Wenn der Computer auf bestimmte Inputs magisch reagiert, also unerwartete Ergebnisse bringt, die eigentlich vom Code gar nicht erzeugt werden dürften, befindet sich ein unerkannter Bug im Code. Computer sind für Magie unempfindlich!

Es gibt nur extrem selten Ausnahmen dabei. Ich habe in meinen 30 Jahren Programmiererfahrung erst eine erlebt: Die Floating-Point-Einheit meines Prozessors war defekt und ein C-Programm brachte unterschiedliche Ergebnisse für 2+2 und 2.0+2.0. Das Problem hatte sich aber nach einer Stunde erledigt, als der Rest des Prozessors auch noch durchbrannte.

Eine andere Lösung wäre:
Code:

Aber STRMATCH wird nicht mehr länger unterstützt und ist langsam.

Gruß, Jan
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.