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

Problem mit Vergleich - Nummer und String

 

AluexRookie
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 15:39     Titel: Problem mit Vergleich - Nummer und String
  Antworten mit Zitat      
Hallo Freunde,

Habe folgendes Problem und versuche es vereinfacht darzustellen.
Habe zwei Vektoren der Form:

x=
36133M
775075
50888T
796851

y=
775075
'36133M'
458884
'80858Y'


usw. (ist nur ein Beispiel, natürlich sind die Vektoren viel länger)


Das Ziel ist jetzt x mit y zu vergleichen und falls der Wert doppelt vorkommt, dann diesen Wert aus dem Vektor x löschen.
Hier mal der Ansatz meines Codes:

Code:
temp=false(1, length(x));

for i=630:940 % Da nur dieser Abschnitt des Vektors y soll mit x verglichen werden

    for j=1:length(x)

        if strcmp(x(1,j),y(i,2))

            temp(1,j)=true;

        end
    end
end

x(:,temp)=[];


Normalerweise müsste er nun 36133M und 775075 aussortieren. Das Problem ist allerdings, dass er nur 36133M aussortiert, weil er 775075 scheinbar nicht erkennt.
Verstehe außerdem nicht ganz warum in Y die strings in Anführungszeichen stehen und in x nicht. Liegt es evtl daran??

Würde mich sehr über schnelle Hilfe freuen. Smile

Beste Grüße
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 05.06.2013, 15:53     Titel:
  Antworten mit Zitat      
Hallo

weil du unterschiedliche Datentypen hast, funktioniert dein Konstrukt deswegen nicht
x ist wohl ein CHAR-Matrix während y ein Cell-Array. Cell-Array kann unterschiedliche Typen beinhalten, bei dir vermutlich sind das Strings und Doubles.

Hier musst du wohl den Datentyp zuerst anpassen.
Hilfreiche Funktionen könnten ISA, SPRINTF sein.
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: 05.06.2013, 16:08     Titel: Re: Problem mit Vergleich - Nummer und String
  Antworten mit Zitat      
Hallo AluexRookie,

Zitat:
y=
775075
'36133M'
458884
'80858Y'

Verstehe außerdem nicht ganz warum in Y die strings in Anführungszeichen stehen und in x nicht.

Bitte erkläre noch den Typ der "Vektoren". Es ist essentiell für die Lösung zu verstehen, wieso manche Zahlen und andere Strings zu sein scheinen. Benötigst Du wirklich einen solchen Mix?!
Wenn alle Elemente den gleichen Typ haben, ist ISMEMBER eine einfache und effiziente Lösung.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.06.2013, 16:22     Titel:
  Antworten mit Zitat      
Erstmal Danke für eure schnellen Antworten! Smile

Ich hatte auch die Vermutung dass es an unterschiedlichen Datentypen liegen könnte. Nur zeigt Matlab die Vektoren als cell an.

Die Daten sind von Excel eingelesen. Wobei der X Vektor im laufe des längeren Codes bereits verwendet worden ist und Y unbehandelt blieb.
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: 05.06.2013, 17:04     Titel:
  Antworten mit Zitat      
Hallo AluexRookie,

Ich gehe davon aus, dass ein Cell String für Dich am nützlichsten wäre. Dann:
Code:
y = {775075; '36133M'; 458884; '80858Y'};
isDoubleValue = cellfun('isclass', y, 'double');
Str = sprintf('%.16g*', y{isDoubleValue});
C   = regexp(Str, '*', 'split');  % Ist das letzte Element leer?!
y(isDoubleValue) = C(:);

% Nun ist das Finden gemeinsamer Elemente einfach:
inBoth = ismember(x,y);
x(inBoth) = [];

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2013, 12:33     Titel:
  Antworten mit Zitat      
Wie ich gerade sehe, habe ich mich etwas unglücklich ausgedrückt. Die Werte die gleich sind, sollen aussoortiert werden im Sinne von: In einen extra Vektor aufführen.
Hier macht er jetzt im Prinzip das Gegenteil. Schreibt die raus, die nicht gleich sind. Smile

Um noch einmal die Ausgangssituation zu verdeutlichen:

Habe zwei structs mit Inhalt: Ein Vektor mit den Kennziffern, eine Matrix mit den dazugehörigen Daten und ein Vektor die hierbei jetzt nicht wichtig ist.
Der eine struct beinhaltet Daten zum Kapital einzelner Unternehmen, der andere struct beinhaltet Börsenwerte zu einzelnen Unternehmen.
Da ich diese Werte nun in relation setzen möchte, ist es wichtig dass nur die Werte gleicher Unternehmen in relation gesetzt werden. Und deshalb muss ich Unternehmen, sowie deren Daten, die nicht in beiden Matrizen bzw. Vektoren vorhanden sind, rausschmeißen.

Hoffe das hilft um die Problematik leichter zu verstehen Smile
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: 10.06.2013, 13:29     Titel:
  Antworten mit Zitat      
Hallo AluexRookie,

Es wurde immer noch nicht erklärt, welchen Typ die Daten haben.

Zitat:
Hier macht er jetzt im Prinzip das Gegenteil

Wo macht wer welches Gegenteil?

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 10.01.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2013, 13:56     Titel:
  Antworten mit Zitat      
Hatte ich oben kurz erwaehnt dass matlab die vektoren und matrizen als "cell" anzeigt.
Mit gegenteil meine ich, dass durch den von dir aufgefuehrten code, die ungleichen unternehmen rausgesucht werden und die gleichen rausgeschmissen. Mein ziel ist aber eben umgekehrt.
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: 10.06.2013, 14:22     Titel:
  Antworten mit Zitat      
Hallo AluexRookie,

Ja, das Array ist ein Cell. Un ich habe geraten, ob die DOUBLEs im Inhalt des Cells in Strings umgewandelt werden sollen. Ich weiß aber immer noch nicht, ob dies richtig geraten war.

Kann es sein, dass Du einfach nur ein "not()" in den Code einfügen musst, um aus einem ISMEMBER etwas wie ISNOTMEMBER zu machen?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
jurtsche
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 26.03.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2013, 07:17     Titel:
  Antworten mit Zitat      
Hi,

Versuch mal:
Code:
Code:
index = cellfun(@(x) any(~ischar(x)),Vektor);
Vektor{index} = mat2str(Vektor{index});
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.