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

Die Matrizen aus Cell miteinander spaltenweise vergleichen

 

newbie82
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.09.2010, 04:25     Titel: Die Matrizen aus Cell miteinander spaltenweise vergleichen
  Antworten mit Zitat      
Hallo,

ich habe nochmal ein Problem.

Und zwar habe ich eine cell (3x99), die an jeder Stelle eine Matrix hat.
Diese sollen verglichen werden.

Also meine "all_matrix" sieht so aus:

Code:

2x2   2x2   3x2   3x2   4x2   4x2   5x2   5x2   6x2  ...
2x2   2x2   3x2   3x2   4x2   4x2   5x2   5x2   6x2  ...
2x2   2x2   3x2   3x2   4x2   4x2   5x2   5x2   6x2  ...
 


Die Matrizen haben unterschiedliche Größen, aber sie sollen eh Spaltenweise durchsucht werden.

Also zB "all_matrix{1,5}" soll mit "all_matrix{2,5}" und "all_matrix{3,5}" verglichen werden usw.

Dann die 4x2-Matrix an der Stelle all_matrix{i,5] für i=1:3:

Die drei Vektoren:
Code:

7  2               4  2               8  1
3  5               6  3               7  7
4  1               9  3               4  3
8  3               5  1               5  2
 


Jetzt soll immer die erste Spalte schrittweise miteinander verglichen werden.

Also die 7 mit der 4 und der 8. -> Die 8 ist am größten -> 8 1 3 (wegen all_vektors{3,5}, der aus der dritten Reihe) werden irgendwo in einer neuen Matrix gespeichert.

Dann 3, 6, 7 -> 7 ist am größten, es wird gespeichert: 7 7 3

4, 9, 4 -> 9 ist am größten -> 9 3 2

Und schlussendlich 8, 5, 5 -> 8 ist am größten -> 8 3 1


Ergebnis:

Code:

8  1  3
7  7  3
9  3  2
8  3  1
 


Gibt es für sowas schon eine Funktion?
Wie geht das?

Vielen Dank!

newbie
Private Nachricht senden Benutzer-Profile anzeigen


lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 13.09.2010, 09:14     Titel:
  Antworten mit Zitat      
Hi,

kann mir jetzt nicht auf die Schnelle so ein Cell generieren lassen aber hast du schon mal bei
Code:
nachgeschaut.

Gruß,

Lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.09.2010, 19:39     Titel:
  Antworten mit Zitat      
Habs mir durchgelesen, aber werde da irgendwie nicht schlau draus Confused Embarassed glaub dafür hab ich doch noch zu wenig Ahnung davon.
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2010, 19:38     Titel:
  Antworten mit Zitat      
Ich hab mal ein Bildchen gemalt, vielleicht ist es dann klarer, wie es funktioniert Mr. Green

Und ich hab die Matrizen aus dem Beispiel in der array mal hochgeladen... falls jemand rumexperimentieren will.

Wie ihr seht, ist mir das echt wichtig Sad

Es sollen nur die 3 Matrizen miteinander vergleichen werden, die im blauen Balken sind (beim 1. Mal hab ichs weggelassen, weils sonst zu voll wird da vorne).



Vielen Dank!

beispiel.zip
 Beschreibung:

Download
 Dateiname:  beispiel.zip
 Dateigröße:  407 Bytes
 Heruntergeladen:  406 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
MatLabNooB
Forum-Guru

Forum-Guru


Beiträge: 262
Anmeldedatum: 27.03.09
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.09.2010, 21:01     Titel:
  Antworten mit Zitat      
also ich würde es so machen, erstmal alle werte der 1ten spalte in eine große matrix und die werte der 2ten spalte in eine matrix bringen (mittels cellfun oder einer schleife), die zB so aussehn würde:

mat1 =
7 4 8
3 6 7
4 9 4
8 5 5

mat2 =
2 2 1
5 3 7
1 3 3
3 1 2

dann ist dein output
Code:
[value idx] = max(mat1,[],2);
output = [value mat2(idx) idx];
 


gruß matlabnoob
Private Nachricht senden Benutzer-Profile anzeigen
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 15.09.2010, 22:32     Titel:
  Antworten mit Zitat      
genau sowas hatte ich auch im Sinne

Code:


newMatrix = [matrix1(:,1),matrix2(:,1),matrix3(:,1)]; % hier werden die  %ersten Spalten der Matrizen in eine temporäre Matrix
% zusammengeführt

[val,index] = max(newMatrix,[],2)

 


ist schon mal ein Ansatz...werde morgen drüber nachdenken..

Gruß,
lilov
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.09.2010, 01:01     Titel:
  Antworten mit Zitat      
Danke, ihr habt mir schon sehr weitergeholfen...

Nur ein kleiner Fehler noch irgendwo, ich krieg nämlich dies hier raus:

Code:

8   1   3
7   1   3
9   5   2
8   2   1
 


Hatte das hier eingegeben:

Code:
newMatrix1 = [array{1,1}(:,1),array{2,1}(:,1),array{3,1}(:,1)]; % hier werden die  %ersten Spalten der
newMatrix2 = [array{1,1}(:,2),array{2,1}(:,2),array{3,1}(:,2)]; % hier werden die  %ersten Spalten der

[value idx] = max(newMatrix1,[],2);
output = [value newMatrix2(idx) idx];
 
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie82
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 68
Anmeldedatum: 10.06.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.09.2010, 02:58     Titel:
  Antworten mit Zitat      
Da ist offensichtlich ein Fehler bei "newMatrix2(idx)".

idx zeigt ja die richtigen Zahlen an, nur gibt er nicht die Zahlen aus der Matrix an dieser Stelle wieder... Confused

Hat noch jemand Ideen?
Private Nachricht senden Benutzer-Profile anzeigen
 
newbie_82

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.09.2010, 17:05     Titel:
  Antworten mit Zitat      
Habs mit diesem Code jetzt versucht:

Code:

for i= 1:4
output(i) = [value newMatrix2(i,idx(i)) idx];
end
 


Wieso geht das nicht?! Das muss doch gehen...
 
lilov
Forum-Century

Forum-Century


Beiträge: 193
Anmeldedatum: 05.05.10
Wohnort: Bremerhaven
Version: ---
     Beitrag Verfasst am: 19.09.2010, 19:48     Titel:
  Antworten mit Zitat      
hi,

so müsste es funktionieren.. vllt geht's auch eleganter aber immerhin eine Lösung:

Code:



newMatrix = [matrix1(:,1),matrix2(:,1),matrix3(:,1)];
[val,noMatrix] = max(newMatrix,[],2);
bigMatrix = [matrix1 matrix2 matrix3]; % alle 3 Matrizen zusammentun
output = zeros(size(bigMatrix,1),3); % leere Matrix definieren

% noMatrix(i)*2-1 ist der aktuelle index in der großen matrix
%  *2 kommt daher weil du in den kleinen Matrizen jeweils 2 zahlen pro
%  Reihe hast

for i =1: size(bigMatrix,1)
output(i,:)= [bigMatrix(i,noMatrix(i)*2-1) bigMatrix(i,noMatrix(i)*2) noMatrix(i)];
end

 


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