|
|
Matrix-Knobelei - wie baue ich am Besten eine 0-1 Matrix? |
|
Lena96 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.04.2014, 19:18
Titel: Matrix-Knobelei - wie baue ich am Besten eine 0-1 Matrix?
|
 |
Hallo zusammen,
ich habe ein Knobel-Problemchen, bei dem ich leider noch keine Lösung gefunden habe. Vielleicht sieht ja jemand die Lösung direkt und könnte mir einen Tipp geben .
Und zwar möchte ich gerade folgende Matrixstruktur implementieren für verschiedene T.
In der ersten Zeile: Null bzw. T Nullen.
In den nächsten Zeilen: eine 1 bzw. die 1 kommt einmal in der Zeile vor.
In den weiteren Zeilen ghet das dann so weiter
In der letzten Zeile: stehen nur noch 1.
Ich denke aufgezeichnet sieht man relativ schnell was ich meine.
Hat jemand einen Tipp, wie ich da weiter komme? Habe da jetzt relativ lange dran geknobelt mit repmat und co, komme aber auf keine Lösung !
Vielen Dank euch!
Für T=1 soll die Matrix so aussehen:
[0
1]
Für T=2:
[00
01
10
11]
Für T=3:
[000
001
010
100
011
101
110
111]
Für T=4:
[0000
0001
0010
0100
1000
1100
1010
1001
0110
0101
0011
1110
1011
1101
0111
1111]
usw.
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 18.04.2014, 19:35
Titel:
|
 |
Hallo,
ohne Berücksichtigung der Reihenfolge ginge es so:
Mit Reihenfolge müsste ich noch etwas überlegen.
Nach welcher Regel entscheidest du, wie die Kombinationen mit gleicher Anzahl 1en angeordnet werden sollen?
Grüße,
Harald
|
|
|
Lena96 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 18.04.2014, 20:03
Titel: danke!
|
 |
Hallo Harald,
vielen Dank! Nach genau so einer Funktion habe ich gesucht.
Es ist (bisher noch) vollkommen egal, wie das angeordnet ist. Es kann sein, dass das später für mich noch relevant wird, aber bisher ist das für meine Idee, die ich darauf anwenden will, vollkommen irrelevant.
Besten Dank nochmals,
Lena
|
|
|
Lena96 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.04.2014, 10:18
Titel: Wie kann man damit die FIND Funktion noch kombinieren?
|
 |
Moin,
ich habe nochmal eine Frage dazu. Gestern ist mir nämlich noch ein Problem üer den Weg gelaufen, was sich durch Benutzung dieser doch ziemlich sinnvollen Funktion ergeben hat.
Wenn ich jetzt also die "Matrix" mit den 0 und 1 drin habe, kann ich leider die FIND Funktion nicht mehr anwenden um zu schauen, wo denn die 1 drin stehen, denn es wird einfach angeben, dass in allen Indizes was drin steht.
Habe schon versucht mit diversen Convertern zu arbeiten, str2num und co, aber leider ist dann das Problem, dass die ersten Nullen einfach weggelassen werden.
Was kann ich noch versuchen?
Viele Grüße
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 19.04.2014, 10:27
Titel:
|
 |
Hallo,
wie genau hast du find verwendet, und was willst du damit erreichen?
Grüße,
Harald
|
|
|
Lena96 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.04.2014, 10:33
Titel:
|
 |
Hallo Harald,
Also z.B. habe folgende Matrix durch deine vorgeschlagene Funktion erhalten:
R=
[0 0 0
0 0 1
0 1 0
1 0 0
0 1 1
1 0 1
1 1 0
1 1 1]
Jetzt möchte ich gerne, wenn ich den find Befehl verwende, die Positionen der 1en erhalten:
find(R(1, )= 0
find(R(2, )= 3
...
find(R(8, )=1 2 3
Aber stattdessen erhalte ich jeweils:
find(R(1, ) = 1 2 3
find(R(2, ) = 1 2 3
...
find(R(8, ) = 1 2 3
Leider funktioniert "findstr(..)" auch nicht...
|
|
|
Lena96 |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 19.04.2014, 10:34
Titel:
|
 |
ich hätte die smilies daktivieren sollen... das soll natürlich jeweils z.B. heißen:
( 1, : )
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 19.04.2014, 10:53
Titel:
|
 |
Hallo,
die Daten sind vom Datentyp char. Was gehen würde:
Wenn du lieber mit einer echten Matrix von 0 und 1 arbeiten willst, hilft
Noch besser als Smilies deaktivieren ist die Code-Umgebung
Grüße,
Harald
|
|
|
Lena96 |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 19.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 19.04.2014, 11:08
Titel:
|
 |
Besten Dank - die Umwandlung habe ich gesucht, aber nicht gefunden. Hatte es nur mit str2double versucht. Aber arrayfun ist klasse!
|
|
|
Lena96 |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 19.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 28.04.2014, 08:46
Titel:
|
 |
Hallo,
ich habe noch einmal folgendes Problem. Und zwar habe ich versucht, jetzt eine Schleife zu bauen, mit der am Ende das hier rauskommt:
für k=0:
000
für k=1:
100
010
001
für k=2:
110
011
101
für k=3:
111
Und das ganze, dachte ich mir, sieht in etwas so aus:
K = 3:
for k = 0 : K
jeweils die 1 ranbauen
end
Die Reihenfolge innerhalb der k ist egal. Aber meine Schleife ist ja super ineffizient und ich verschachtel da gerade eine Schleife nach der anderen. Mit dec2bin klappt das so auch nicht so wie gewollt. Gibt es da eine bessere Möglichkeit?
Viele Grüße,
Lena
ps.: einfach dec2bin wie oben vorgeschlagen, klappt leider nicht, da K eher so in der Größenordnung 100 bis 150 ist und es dann einem den Speicherplatz zerschlägt! Ich will daher nur für ausgewählte klein k die Schleife oben bauen.
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 28.04.2014, 09:17
Titel:
|
 |
Hallo Lena96,
Ein Tipp:
Zitat: |
für k=2:
110
011
101 |
Sieh Dir dazu mal die Ausgabe hiervon an:
Hier wird nicht die gesuchte Matrix erzeugt, aber die Indizes, bei denen die Einsen stehen.
Da N-über-K sehr groß werden kann, ist es eventuell hilfreich, UINT8 als Index zu verwenden. Dies ist hiermit möglich:
http://www.mathworks.com/matlabcent.....leexchange/26190-vchoosek
Gruß, Jan
|
|
|
Lena96 |

Forum-Anfänger
|
 |
Beiträge: 10
|
 |
|
 |
Anmeldedatum: 19.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 04.05.2014, 12:40
Titel:
|
 |
besten Dank für den Tip Jan!
|
|
|
|
|
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.
|
|