|
|
Gemeinsame Elemente verschiedene Matrix-Zeilen |
|
MarioW |

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 17.08.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 30.08.2017, 17:52
Titel: Gemeinsame Elemente verschiedene Matrix-Zeilen
|
 |
|
 |
|
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
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
|
|
|
|
|
equi |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 07.03.17
|
 |
|
 |
Wohnort: Tübingen
|
 |
|
 |
Version: Matlab 2018a
|
 |
|
|
 |
|
Verfasst am: 31.08.2017, 10:05
Titel:
|
 |
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:
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
|
|
|
MarioW |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 17.08.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 31.08.2017, 10:41
Titel:
|
 |
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:
Viele Grüße
MarioW
|
|
|
equi |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 07.03.17
|
 |
|
 |
Wohnort: Tübingen
|
 |
|
 |
Version: Matlab 2018a
|
 |
|
|
 |
|
Verfasst am: 01.09.2017, 13:15
Titel:
|
 |
Ich versteh immer noch nicht was du genau willst, tut mir leid.
Bin wohl gerade ein bisschen schwer von Begriff
Ich versteh, dass du dir die Werte ausgeben willst die aus keiner Kombination entstehen
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
|
|
|
MarioW |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 17.08.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 01.09.2017, 14:48
Titel:
|
 |
|
 |
|
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
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.
|
|
|
equi |

Forum-Century
|
 |
Beiträge: 123
|
 |
|
 |
Anmeldedatum: 07.03.17
|
 |
|
 |
Wohnort: Tübingen
|
 |
|
 |
Version: Matlab 2018a
|
 |
|
|
 |
|
Verfasst am: 04.09.2017, 14:17
Titel:
|
 |
Hallo,
ja hab es jetzt verstanden, war eigentlich gar nicht so kompliziert
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
|
|
|
MarioW |
Themenstarter

Forum-Anfänger
|
 |
Beiträge: 11
|
 |
|
 |
Anmeldedatum: 17.08.17
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 04.09.2017, 18:29
Titel:
|
 |
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
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|