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

Gemeinsame Elemente verschiedene Matrix-Zeilen

 

MarioW
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 17.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 30.08.2017, 17:52     Titel: Gemeinsame Elemente verschiedene Matrix-Zeilen
  Antworten mit Zitat      
Hallo ihr Lieben,

Ich habe ein weiteres Problem zu dessen Lösung ich leider nichts brauchbares oder mir verständliches gefunden habe. Vielleicht hat von euch ja jemand einen Tipp wie ich das lösen könnte.

Es geht um folgendes:
In einer Matrix sind verschiedene Zeilen eingetragen bei denen ich einzelne Zeilen mit anderen Zeilen auf gemeinsame Einträge untersuchen möchte. Dazu nutze ich den Befehl "intersect(A,B)", was prinzipiell auch so funktioniert. Das Problem ist aber, dass nicht einfach jede Zeile mit den jeweils restlichen verglichen werden sollen, sondern die Zeilen müssen als "Blöcke" verstanden werden.
Block 1 wären beispielsweise die Zeilen 1 bis 4, Block zwei die Zeilen 5 bis 6, Block 3 die Zeilen 7 bis 10 und so weiter. Ziel soll es sein zu überprüfen ob es in jedem Block eine Zeile gibt, welche mit keiner anderen Zeile eines anderen Blocks gemeinsame Elemente aufweist, außer Nullen, und ob eine solche Zeile in jedem der Blöcke existiert.

Zur besseren Veranschaulichung zeige ich euch eine Beispielmatrix X, mit
Block 1 = Zeile 1 - 3
Block 2 = Zeile 4 - 5
Block 3 = Zeile 6 - 9
Code:


X = [1 2; 1 3; 1 4;
1 5; 2 3;
1 7; 5 6; 2 8; 3 7]
 


Als Ergebnis müssten dabei dann die Zeilen 3, 5 und 7 ausgegeben werden.
Leider ist die Anzahl der Blöcke, sowie die Anzahl der Zeilen eines Blockes im Voraus nicht bekannt.

Ich hoffe das Problem einigermaßen so erklärt zu haben dass man es nachvollziehen kann. Sollte es Verständnisprobleme geben fragt bitte nach, ich werde versuchen es weiter auszuführen.

Falls jemand eine Idee hat dieses Problem zu lösen oder vielleicht einen anderen Ansatz wäre ich für Hinweise ausgesprochen dankbar.

Viele Grüße
MarioW
Private Nachricht senden Benutzer-Profile anzeigen


equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 31.08.2017, 10:05     Titel:
  Antworten mit Zitat      
Hallo,

kurze Frage.

Du schreibst:
Zitat:
ob es in jedem Block eine Zeile gibt, welche mit keiner anderen Zeile eines anderen Blocks gemeinsame Elemente aufweist


Willst du Zeile für Zeile der verschiedenen Blöcke vergleichen(Fall1) oder willst du wirklich schauen ob nur ein einzelnes Element pro Zeile identisch ist mit einem einzelnen Element der anderen Zeile?
Wenn es der 2. Fall ist, muss das einzelne Element an der selben Stelle stehen(Fall 2a) oder einfach nur in der Zeile(Fall 2b)?

Hier die Fälle an deinen Zahlen zum besseren Verständnis meiner Frage:
Code:

Block1 =

   1   2
   1   3
   1   4

Block2 =

   1   5
   2   3


Fall 1:

Keine identische Zeile --> soll alle ausgeben

Fall 2a) (Einzelnes Element vergleichen, Positions ahängig):
Gibt Zeile 5 aus, da Zeilen 1:4 in Spalte 1 eine 1 besitzen

Fall 2b) (Einzelnes Element, positions unabhängig):
Gibt keine Zeile aus, da in Zeile 1:4 in Spalte 1 die 1 ist UND in Block(1,2) und in Block2(2,1) eine 2 steht
_________________

Grüße Equi Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
MarioW
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 17.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 31.08.2017, 10:41     Titel:
  Antworten mit Zitat      
Hallo equi,

vielen Dank für deine Antwort. Ich glaube ich habe mich etwas unglücklich ausgedrückt. Ich suche nach Kombinationen von jeweils einer Zeile pro Block, wobei diese Zeilen keine identischen Einträge wie die anderen Zeilen der Kombination aufweisen soll.
Das bedeutet bei drei Blöcken soll die Ausgabe Kombinationen aus drei Zeilen, bei vier Blöcken Kombinationen aus vier Zeilen und so weiter, enthalten. Die Position der Einträge ist dabei irrelevant.

Bei den von dir geposteten beiden Blöcke 1 und 2 wäre die gewünschte Ausgabe dann:

Code:

Kombination1 = [Block1, Zeile3] und [Block 2, Zeile 2]
 


Viele Grüße
MarioW
Private Nachricht senden Benutzer-Profile anzeigen
 
equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 01.09.2017, 13:15     Titel:
  Antworten mit Zitat      
Ich versteh immer noch nicht was du genau willst, tut mir leid.
Bin wohl gerade ein bisschen schwer von Begriff Rolling Eyes Laughing

Ich versteh, dass du dir die Werte ausgeben willst die aus keiner Kombination entstehen Laughing

Aber mir nicht klar wie die Werte Zustande kommen, die du suchst.
Also die "Suchkriterien", denn ich finde keine (für mich) logischen Zusammenhänge zwischen [Block1, Zeile3] und [Block 2, Zeile 2].

Wäre es [Block1, Zeile3] und [Block 2, Zeile 1], hätte ich gesagt alle Zeilen, die eine Zahl besitzen, die nicht bei der Lösung von intersect vorkommt, suchst du.
_________________

Grüße Equi Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
MarioW
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 17.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 01.09.2017, 14:48     Titel:
  Antworten mit Zitat      
Die Nummer ist echt nicht allzu einfach zu erklären, ich versuche es aber gerne noch einmal. Ich bin dir dankbar dass du dich überhaupt damit auseinandersetzt.

Ich bin mittlerweile auch ein Stück weiter, sodass sich das Problem jetzt folgendermaßen darstellt:

Es existieren 3 Matritzen
Code:

M1 = [1 2 3; 1 2 4; 1 2 5];
M2 = [4 5 6; 3 4 7];
M3 = [4 8 9; 7 8 9];
 


Gesucht werden Zeilenkombinationen aus je einer Zeile pro Matrix für die gilt, dass keines der Elemente dieser Zeile in den anderen Zeilen der anderen Matrizen vorkommen.

Für oben genannte Matrizen soll also folgendes passieren:

(MA.B = Matrix A, Zeile B)
M1.1 - M2.1 - M3.1 ist nicht zulässig, da M2.1 und M3.1 beide eine 4 enthalten.

M1.1 - M2.1 - M3.2 ist zulässig, da M1.1 und M2.1, M1.1 und M3.2 sowie M2.1 und M3.2 keine gemeinsamen Elemente enthalten.

usw.

Wenn ich jetzt versuchen würde jede mögliche Kombination über for-Schleifen zu testen wäre das aufgrund der Rechenzeit nicht umsetzbar. Und leider ist mir bisher noch keine bessere Idee gekommen wie ich die gewünschten Kombinationen schneller auslesen könnte.
Private Nachricht senden Benutzer-Profile anzeigen
 
equi
Forum-Century

Forum-Century


Beiträge: 123
Anmeldedatum: 07.03.17
Wohnort: Tübingen
Version: Matlab 2018a
     Beitrag Verfasst am: 04.09.2017, 14:17     Titel:
  Antworten mit Zitat      
Hallo,

ja hab es jetzt verstanden, war eigentlich gar nicht so kompliziert Very Happy

Ich hab es zwar ausprobiert aber mir war es auch nicht möglich ohne Schleife deine Aufgabe zu bewältigen.

Vielleicht kann man deine Schleifen noch optimieren um die Rechenzeit zu verkürzen?
_________________

Grüße Equi Smile
Private Nachricht senden Benutzer-Profile anzeigen
 
MarioW
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 17.08.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.09.2017, 18:29     Titel:
  Antworten mit Zitat      
Hi,

ich habe jetzt eine Lösung gefunden die ganz gut funktioniert, zwar noch mit der ein oder anderen Kinderkrankheit, aber das sollte sich in den nächsten Tagen auch erledigen.

Ich habe das ganze jetzt über eine while-Schleife realisiert, welche je nach Fall entscheidet welche zwei Zeilen als nächsten verglichen werden sollen. So ist es nicht nötig alle denkbaren Kombinationen durchzurechnen, sondern es werden nur solche Kombinationen weiter untersucht bei denen keine Übereinstimmung vorliegt.
Falls dich der Code dazu interessiert sag kuru Bescheid, dann stelle ich ihn hier ein.
Ansosnten Vielen Dank dass du deine Zeit geopfert und dir für mich die Birne zerbrochen hast!

Viele Grüße
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.