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

Strings finden ohne for Schleife

 

laternenjoe
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 21.07.2015, 15:49     Titel: Strings finden ohne for Schleife
  Antworten mit Zitat      
Hallo,

Ich habe folgende Aufgabe:

Ich habe 2 Vektoren mit chars die alle die gleiche Länge habe. Die beiden vektoren haben unterschiedliche Länge.

zB.
Code:
A=num2str([1:5]');
B=[3 2 5 5 4 4 3 4 2 ];


Gibt es eine Möglichkeit, wie ich hier mit wenig Matlab Befehlen/ohne Schleife herrausfinden kann, wie oft die Werte von A jeweils in B vorkommen?
Dann sowas wie:1 kommt 0 mal in B vor, 2 kommt 2 in B mal vor, 3 kommt 2 mal in B vor,...

Ich müsste also für jeden Index von A eine Zahl haben, die mir sagt wie oft dieser string in B vorkommt?
[row,col]=find(A==B(k)) und dann über jedes Element via forSchleife hatte ich im Sinn, aber leider nur mit forSchleife.
ismember(A,B,'rows') sagt leider nur, ob ein Wert vorkommt. Gibt es da einen Trick 17 mit dem ich das hinbekomme?
Danke
Grüße Laternejoe
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: 21.07.2015, 16:35     Titel:
  Antworten mit Zitat      
Hallo,

Spielt Performance eine wesentliche Rolle? Falls nicht, würde ich die for-Schleife verwenden.

Ansonsten:
wieviele Strings sind denn jeweils in A und B?
Kommen bestimmte Strings typischerweise sehr oft vor? Dann bieten sich evtl. categoricals an. Falls die Daten aus einer Textdatei kommen, kann man sie in aktuellen Releases direkt als categorical einlesen.
Ich vermute, in der Realität sind es keine Zahlstrings?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 21.07.2015, 16:51     Titel:
  Antworten mit Zitat      
Ja, ich wollte es wegen der Performance machen. Eine sehr wesentliche Rolle spielt die nicht, aber es dauert schon etwas länger mit For.
Das sind alles Datenstrings der Form 'dd.mm.yyyy'. Also haben A und B jeweils 10 Spalten.
In A sind 710 strings und in B 40-50.000. Wenn ich das mit ForSchleifen mache dauert das etwas, da wollte ich das verringern. Ich schau mir mal gleich categorize an. Ansonsten lass ich die ForSchleife.
Danke aufjedenfall!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 21.07.2015, 16:56     Titel: Re: Strings finden ohne for Schleife
  Antworten mit Zitat      
Hallo laternenjoe,

Zitat:
Ich habe 2 Vektoren mit chars die alle die gleiche Länge habe. Die beiden vektoren haben unterschiedliche Länge. zB.
Code:
A=num2str([1:5]');
B=[3 2 5 5 4 4 3 4 2 ];

Das zweite ist keine Vektor vom Typ char. Was bedeutet "die alle die gleiche Länge haben"? Ein char besitzt immer ein Zeichen. Wieso spielt es eine rolle, ob beide unterschiedliche Längen haben?

Siehe histc (bzw. das neue histcount ) und accumarray . Beides kann das in einer Zeile lösen.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
laternenjoe
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 21.07.2015, 17:02     Titel:
  Antworten mit Zitat      
Sorry Jan,
Ich hatte die Apostrophe vergessen. bzw. num2str() Embarassed

richtig heißt es
Code:
A=num2str([1:5]');
B=[3 2 5 5 4 4 3 4 2 ];
B=num2str(B');


size(A)=[710,10]
size(B)=[45000,10]

Ja B ist nach dem Einlesen aus Excel erst noch ein Cell-Array. Das hab ich dann per char() auch zu einem Chararray gemacht, damit ich es mit A vergleichen kann.
Das mit der unterschiedlichen Länge habe ich deshalb erwähnt, weil ich vermutet habe, dass es für einige Funktionen nur möglich ist zu vergleichen, wenn beide die Länge/Dimension haben.

Zuletzt bearbeitet von laternenjoe am 21.07.2015, 17:04, insgesamt einmal bearbeitet
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: 21.07.2015, 17:03     Titel:
  Antworten mit Zitat      
Hallo,

dann würde ich die Datumsangaben mit datenum in Zahlen umwandeln.

Falls alle Vorkommnisse von B in A zu finden sind, ginge dann
Code:
counts = hist(B, A);


Andernfalls könnte accumarray helfen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 83
Anmeldedatum: 25.02.15
Wohnort: Bochum
Version: ---
     Beitrag Verfasst am: 21.07.2015, 17:09     Titel:
  Antworten mit Zitat      
Ja, sind alle in A zu finden. Danke euch beiden. Smile
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.