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

Vergleich mehrerer Matrizen

 

Stromberg
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.01.2017, 23:44     Titel: Vergleich mehrerer Matrizen
  Antworten mit Zitat      
Hallo Zusammen,

ich habe aus mehreren Untersuchungen Matrizen A bis Y gleicher Größe zur Auswertung.

Nun möchte ich gerne die kleinste und größte Differenz der Elemente mit gleichem Spalten- und Zeilenindex der Matrizen berechnen.

Ziel ist die Aussage, dass sich die Matrizen A bis Y im Bereich von x bis z unterscheiden?

Hat jemand schon einmal so einen Abgleich/Vergleich durchgeführt und kann mir hier weiterhelfen?
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: 04.01.2017, 00:04     Titel:
  Antworten mit Zitat      
Hallo,

für 2 Matrizen:
Code:
max( A(:) - B(:) )

und entsprechend das Minimum. Ggf. den Betrag nehmen.

Wenn du tatsächlich Matrizen A-Y hast, ist es schwierig darüber zu iterieren.
Einfacher wäre es, wenn du die Matrizen in einem Cell Array abspeicherst.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2017, 00:19     Titel:
  Antworten mit Zitat      
Hallo Harald,

genau das ist mein Problem. Bei 2 Matrizen ist das noch relativ einfach. Bei mehreren wird das schwierig.

Wie meinst Du das mit dem Abspeichern in Cell Arrays?

So etwa?

Code:
cell = {A, B, C, ...,Y}
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: 04.01.2017, 00:25     Titel:
  Antworten mit Zitat      
Hallo,

genau, aber die Variable nicht cell nennen, da dies auch ein Befehl ist.

Falls möglich (und das ist es in aller Regel), würde ich die Variablen gar nicht erst A - Y nennen, sondern gleich das Cell Array erzeugen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2017, 00:35     Titel:
  Antworten mit Zitat      
Hallo Harald,

ok, dass sollte möglich sein.

z. B. so:

Code:

cell_res = {magic(5), magic(5)*2, magic(5)*3, magic(5)*4};
 


Nur wie mache ich das jetzt mit dem Differenzieren der Elemente zueinander mit gleichen Zeilen- und Spaltenindex?
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: 04.01.2017, 09:27     Titel:
  Antworten mit Zitat      
Hallo,

wie oben, nur mit cell_res{i} und cell_res{j} statt A und B.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.01.2017, 15:13     Titel:
  Antworten mit Zitat      
Hallo Harald,

jetzt komme ich leider nicht mehr mit oder stehe auf dem Schlauch:

Mit

Code:
cell_res = {magic(5), magic(5)*2, magic(5)*3, magic(5)*4};


erhalte ich ein Cell Array (1x4), welches 4 Matrizen (5x5) beinhaltet.

Berechne ich

Code:
max(cell_res{1} - c_res{4})
so enstpricht dies

Code:


und ich bilde nur die Differenz von zwei Matrizen.

Vielleicht verstehe ich das auch falsch.



Ich versuche mal mein Vorhaben so zu erklären:

- Ich habe n Matrizen der Größe i x j

- Jede Matrize könnte man beispielsweise als Höhenkarte mit unterschiedlichen Z-Werten betrachten

- Würde ich die Matrizen übereinander anordnen so ensteht eine 3D Matrix i x j der Höhe n

- Ziel ist es aus jeder Spalte (n-Richutng = senkrecht) der dreidimensionalen Matrix die minimale und maximale Differenz, ähnlich wie mit dem Befehl diff zu ermitteln.


- Ergbebnis: Die Differenz der Höhen (Z-Werte der Matrizen) der n Matrizen der Größe i x j unterscheiden sich zwischen Min-Wert und Min-Wert
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: 09.01.2017, 21:33     Titel:
  Antworten mit Zitat      
Hallo,

ich habe nicht ohne Grund das (:) hinter die Matrizen gesetzt.
Das sollte genau das gewünschte Verhalten erzeugen.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2017, 05:09     Titel:
  Antworten mit Zitat      
Hallo Harald,

Danke für die Rückmeldung. Ich komme jedoch nicht weiter bzw. kann das nicht nachvollziehen.

Wie meinst Du das mit "(Smile"?

Als Ausgang haben wir:

Code:
cell_res = {magic(5), magic(5)*2, magic(5)*3, magic(5)*4};


Du hattest geschrieben:

Code:
max( A(:) - B(:) )


Könntest Du mir anhand dem Beispiel weiterhelfen?
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: 10.01.2017, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

du brauchst wirklich nur das (:) dahinterzusetzen.

Code:
cell_res = {magic(5), magic(5)*2, magic(5)*3, magic(5)*4};
N = numel(cell_res);
minDists = zeros(N,N);
maxDists = zeros(N,N);
for I = 1:N
    for J = 1:N
        dists = abs( cell_res{I}(:) - cell_res{J}(:) );
        minDists(I,J) = min( dists );
        maxDists(I,J) = max( dists );
    end
end


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.01.2017, 23:22     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen, vielen Dank für Deine Hilfe.

Für Dich war es vielleicht nur das Dahintersetzen des "(Smile", für mich viel viel mehr.

Danke.
Private Nachricht senden Benutzer-Profile anzeigen
 
Stromberg
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.01.2017, 00:33     Titel:
  Antworten mit Zitat      
Hallo Harald,

ich muss das Thema nochmals aufgreifen.

Nach Prüfung komme ich nicht zum erhofften Ergebnis.

Das cell

Code:
cell_res = {magic(5), magic(5)*2, magic(5)*3, magic(5)*4}


ist nur ein vereinfachtes Beispiel.

Meine Matrizen haben die Größe 341x741.

Doch zurück zum Beispiel cell_res:

Greife ich

die 1. Matrize auf, so ist der Wert (1,1) = 17
die 2. Matrize hat den Wert bei (1,1) = 34
die 3. Matrize hat den Wert bei (1,1) = 51
die 4. Matrize hat den Wert bei (1,1) = 68

Demzufolge resultiert hieraus ein minimale Differenz von 17 --> 34-17

und eine maximale Differenz von 51 --> 68-17

Schaue mich mir aus dem von Dir bereitgestellten Algorithmus die Ergebnisse an:

maxDists (1,1) = 0
minDists (1,1) = 0

dann passt das nicht zur oben dargestellten Rechnung.

Könntest Du mir hier nochmals behilflich sein?
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: 12.01.2017, 09:52     Titel:
  Antworten mit Zitat      
Hallo,

okay, das ist eine vollkommen andere Frage als ich dachte. Realistische Beispiele inklusive erwarteter Ergebnisse helfen da...

Ich habe den Vergleich in einer anderen Richtung gemacht als du dir das wohl vorgestellt hast.

Neuer Versuch, dieses Mal die Matrizen als 3D-Array angeordnet
Code:
array3d = cat(3, magic(5), magic(5)*2, magic(5)*3, magic(5)*4);
maxDist = max(array3d, [], 3) - min(array3d, [], 3)
sortedArray = sort(array3d, 3);
minDist = min( diff(sortedArray, 1, 3), [], 3)


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 58
Anmeldedatum: 13.10.14
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.01.2017, 22:04     Titel:
  Antworten mit Zitat      
Danke Harald,

funktioniert wie erhofft.

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