Wie kann ich in Matlab eine Tabelle nach 2 Werten durchsuchen?

1 Antwort

Da ich nicht weiss, wie gut du dich mit Matlab auskennst, schreib ich dir einfach mal meine Idee auf. Falls etwas im Code unklar ist, kannst du dann gerne noch nachfragen :)

Vergleich mit der 4. & 5. Spalte von Matrix T2 (Tabelle2):

disp('Übereinstimmungen (beide Stellen):')
for k = 1 : size(T1,1)
fprintf('\n%d. Zeile von T1 mit\n',k)
for n = 1 : size(T2,1)
if T1(k,:) == T2(n,4:5)
fprintf(' Zeile %d von T2\n',n)
end
end
end

Output:

Übereinstimmungen (beide Stellen):

1. Zeile von T1 mit
Zeile 5 von T2

2. Zeile von T1 mit

3. Zeile von T1 mit
Zeile 2 von T2
Zeile 4 von T2

4. Zeile von T1 mit
Zeile 3 von T2
LuckyRain  27.05.2017, 19:11

Ergänzung

Statt direkt einen Output zu generieren könntest du die "Lösung" natürlich auch in einer Matrix oder Zelle speichern. V.a. wenn die Matrix T1 oder T2 gross ist, wäre dies dann wohl übersichtlicher...

1
bencemanyak 
Fragesteller
 27.05.2017, 23:44
@LuckyRain

genau das ist der Fall bei mir, die Tabelle2 hat mehr als 200 Zeilen und mehr als 40 Spalten. 

wie könnte ich das dann ausgeben lassen ? 

Ich habe das obere "Code" nicht so verstanden " Außer die Printzeile und die "Disp" Bezeichnung. die sind mir bekannt

for k = 1 : size(T1,1)
for n = 1 : size(T2,1)
if T1(k,:) == T2(n,4:5)

?? kannst du mir die beiden vielleicht etwas besser erklären wenn es geht bitte

0
LuckyRain  28.05.2017, 01:11
@bencemanyak

Dann hast du also noch nicht so viel Erfahrung mit Matlab... Wieso brauchst du da überhaupt so etwas, wenn ich fragen darf? ^^

Ich nehme mal an du besitzt Matlab, z.B. mit "help for" (ins Command Window eingeben) findest du da direkt Hilfe (runter scrollen und auf "Reference page for for" klicken).

Mach dich doch so mal schlau über "for" und "if", es wird dort recht gut erklärt, auch mit Beispielen...


Denn Code könntest du folgendermassen anpassen:

z1 = size(T1,1);    % Anzahl Zeilen von Tabelle1
z2 = size(T2,1);    % Anzahl Zeilen von Tabelle2
U = cell(z1,1);     % hier werden Übereinstimmungen gespeichert

for k = 1 : z1 j = 1; for n = 1 : z2 if T1(k,:) == T2(n,4:5) U{k}(j) = n; j = j+1; end end end
celldisp(U);

Output:

U{1} =
     5

U{2} = []
U{3} = 2 4
U{4} = 3

Statt einen Output generieren zu lassen, kannst du aber auch einfach auf "U" im Workspace klicken, da ist der Inhalt "kompakter" angegeben...

Der obige Code ist aber immer noch auf die Spalten 4 und 5 der Tabelle2 fixiert, falls du mehrere Spalten überprüfen möchtest, könnte man noch weitere Schleifen (siehe "help for") einbauen...

1