ich möchte die erste zahl aus der ersten zeile mit jeder weiteren ersten zahl aus den anderen zeilen vergleichen. und dann die zahl aus der 1 zeile/2 spalte mit jeder zahl aus allen zeilen aber spalte 2 vergleichen usw...
für mich ist nicht klar, was das Ergebnis sein soll.
Wenn du einen Wert mit 9 anderen vergleichst, bekommst du nun 9 Ergebnisse. Sollen es wirklich 9 Ergebnisse sein oder willst du die irgendwie weiterverarbeiten (min, max, mean, ...), um für jeden Eintrag ein Ergebnis zu bekommen?
Was wäre z.B. für
24 38 22
44 20 44
18 50 14
33 43 28
das gewünschte Ergebnis? (ich denke, 4 Zeilen und 3 Spalten sind erst mal genug)
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hallo Harald ich benutze mal deine zahlen als beispiel.
wir haben also die matrix
24 38 22
44 20 44
18 50 14
33 43 28
jetzt soll Zeile 1 mit jeder ANDEREN Zeile verglichen werden, sprich subtrahieren.
z.B. 1 zeile - 2 zeile --> 24-44, 38-20, 22-44
1 Zeile - 3 Zeile --> 24-18, 38-50, 22-14
usw.. bis die 1 zeile mit jeder anderen verglichen wurde
wenn die 1 zeile mit allen anderen verglichen wurde, soll anschließend die 2 zeile mit jeder verglichen werden....usw, bis alle Zeilen die ich in meiner matrix habe miteinandern verglichen wurden.
WIESO das ganze??
am ende des programms sollen mir nur die zeilen aus meiner riesen großen matrix angezeigt werden, wo der abstand(subtraktion von vorhin) an jeder stelle nicht größer als 3 ist.
wenn ich z.B. so eine matrix habe 10 25 45
11 34 56
15 35 55
dann soll mir nur die 1 zeile und die 3 zeile angezeigt werden, da sich die 11 in der 2 zeile von der 10 in der 1 zeile nur um 1 unterscheidet.
statt all kannst du auch any nutzen, falls du nur einen Wert brauchst der kleiner ist.
C wäre dann die Ersatzmatrix. Geht bestimmt sogar noch schlanker.
leider hat der Code von dir nicht mein Problem gelöst. Wenn ich deinen code anwende auf meine matrix(bestehend aus 10 zeilen), bekomme ich 10 ausgaben, wobei mir bei jeder Ausgabe 1 zeile weniger aus meiner matrix angezeigt wird.
sprich. 1 Ausgabe. 10 zeilen aus meiner matrix
2 Ausgabe. 9 zeilen aus meiner matrix
usw.....
usw.. bis die 1 zeile mit jeder anderen verglichen wurde
wenn die 1 zeile mit allen anderen verglichen wurde, soll anschließend die 2 zeile mit jeder verglichen werden....usw, bis alle Zeilen die ich in meiner matrix habe miteinandern verglichen wurden.
Deine "usw" sind genau das Problem.
Ich habe das kleine Beispiel gewählt, weil ich die kompletten Ergebnisse sehen wollte. Wenn dir das bei 4x3 zu viel Arbeit ist, kannst du die Matrix gerne noch etwas verkleinern. Das resultiert meines Erachtens in einer 3D-Matrix oder einem Cell Array und die Frage ist, wie diese gespeichert werden sollen.
Zitat:
wenn ich z.B. so eine matrix habe 10 25 45
11 34 56
15 35 55
dann soll mir nur die 1 zeile und die 3 zeile angezeigt werden, da sich die 11 in der 2 zeile von der 10 in der 1 zeile nur um 1 unterscheidet.
Der Logik kann ich nicht folgen.
Wie lässt sich die Logik, dass zwei Elemente in zwei Zeilen sich wenig unterscheiden und man deswegen eine dritte angezeigt haben möchte auf viele Zeilen verallgemeinern?
In der dritten Spalte sind die Unterschiede zwischen Zeile 1 und 3 doch durchaus groß?
Zitat:
Wenn ich deinen code anwende auf meine matrix(bestehend aus 10 zeilen), bekomme ich 10 ausgaben, wobei mir bei jeder Ausgabe 1 zeile weniger aus meiner matrix angezeigt wird.
Dann poste doch bitte deine Matrix und deinen momentanen Code, damit man das nachvollziehen kann. Andys Code erzeugt nämlich erst mal überhaupt keine Ausgabe im Command Window (sofern du das meinst).
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
hallo zusammen, ich habe unten mein aktuellen code mit kommentaren was der jeweilige abschnitt machen soll und was noch nicht stimmt. und unter dem code nochmal ein kleines beispiel, welches das problem/ziel klar machen sollte.
vielen dank euch allen
Code:
%Hier erstelle ich mir eine matrix mit 10 zeile und 6 spalten mit zahlen zwischen 10 und 50
a = zeros(10,6);
for n = 1:10
a(n,:) = randi([1050],1,6);
end
%Mit dieser schleife habe ich bis jetzt definiert, dass zeile 1 mit zeile 2 verglichen wird, dann zeile 2 mit zeile 3 usw...[b]ABER[/b] ich möchte das jede zeile mit jeder zeile verglichen wird, hier komme ich gerade nciht weiter
for n = 1:9 for i =1:6
differ(n,i) = abs(a(n,i) - a(n+1,i));
end end
% hier ist dann meine Ausgabe: es sollen mir nur die jenigen zeilen (n) aus der matrix angezeigt bekommen, welche sich an jeder stelle um mindestens 3 unterscheiden verglichen mit der zeile die drüber steht. Mein Ausgabe ist aber falsch, sie funktioniert nicht
for n=1:8 if differ(n,:) >=3
SCODE = a(n:n+1,:) end end
hier nochmal ein sehr einfaches beispiel um nochmal das ziel zu erleutern. ich erzeuge eine zufallsmatrix, angenommen sie ist 12 14 16 18
15 17 20 25
15 18 21 30
18 21 25 30
Die dritte Zeile aus der matrix soll quasi rausgefiltert werden, da sich sich nicht an jeder stelle um 3 unterscheidet verglichen mit zeile 2!!! Die vierte zeile kann wieder ausgegeben werden, da sich sich an jeder Stelle um mindestens 3 unterscheidet verglichen mit der zweiten Zeile.
ich hoffe ich konnte das Problem nun richtig erläutern.
hallo zusammen, hab jetzt herausbekommen, wie ich jede zeile mit jeder zeile vergleichen kann. hab da an den tipp von Harald gedacht, bezogen auf 3D-Matrizen usw...
Code:
for x = 1:9 for n = 1:9 for i =1:6
differ(n,i,x) = abs(a(x,i) - a(n+1,i));
end end end
hier nochmal ein sehr einfaches beispiel um nochmal das ziel zu erleutern. ich erzeuge eine zufallsmatrix, angenommen sie ist 12 14 16 18
15 17 20 25
15 18 21 30
18 21 25 30
Die dritte Zeile aus der matrix soll quasi rausgefiltert werden, da sich sich nicht an jeder stelle um 3 unterscheidet verglichen mit zeile 2!!! Die vierte zeile kann wieder ausgegeben werden, da sich sich an jeder Stelle um mindestens 3 unterscheidet verglichen mit der zweiten Zeile.
Wenn das dein Ziel ist, brauchst du aber nur jede Zeile mit der gegenwärtig vorherigen vergleichen:
Code:
M = [12141618 15172025 15182130 18212530];
k = 2;
count = 2;
while count < size(M,1) if ~all(abs(M(k,:) - M(k-1,:)) >= 3)
M(k,:) = [];
else
k = k + 1;
end
count = count + 1;
end disp(M)
Es kann sein, dass ich nicht jede Eventualität bedacht habe, aber zumindest für den Fall erzeugt es den gewünschten Output.
Wenn das für eine andere Matrix nicht der Fall ist, bitte diese Matrix posten und welcher Output stattdessen erwartet wird.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
also die ersten 6 Zeilen des outputs sind richtig, dank deines Algorithmus. Die 7 und 8 Zeile des outputs soll er aber nicht mehr anzeigen, da einmal die 30 über der 30 steht (Zeile 6 und 7) und einmal steht die 30 über der 31 (Zeile 7 und , sprich in beiden fällen kein unterscheid größer gleich 3.
ich konnte dein Code eig. gut nachvollziehen und verstehe eig. nicht wieso der Code ab einer bestimmten Zeile nicht mehr unterscheidet.
Meine Matrix wird immer zufällig generiert. Was konstant bleibt ist die Zeilenzahl=10 und die Spaltenzahl = 6, sowie die vorkommenden zahl zwischen 10 und 50: das liegt am Projekt
solche Fehler kann man am besten finden (und beheben), in dem man das zeilenweise im Debugging-Modus durchgeht. Ich hatte mich da irgendwo gedanklich verheddert. Es geht auch ohne die Variable count und so sogar noch nachvollziehbarer:
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
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
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.