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

Matrix-Knobelei - wie baue ich am Besten eine 0-1 Matrix?

 

Lena96

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2014, 19:18     Titel: Matrix-Knobelei - wie baue ich am Besten eine 0-1 Matrix?
  Antworten mit Zitat      
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 Very Happy .
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 Rolling Eyes !

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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.04.2014, 19:35     Titel:
  Antworten mit Zitat      
Hallo,

ohne Berücksichtigung der Reihenfolge ginge es so:
Code:
N = 4;
dec2bin(0:2^N-1)


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
Private Nachricht senden Benutzer-Profile anzeigen
 
Lena96

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.04.2014, 20:03     Titel: danke!
  Antworten mit Zitat      
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: ---
     Beitrag Verfasst am: 19.04.2014, 10:18     Titel: Wie kann man damit die FIND Funktion noch kombinieren?
  Antworten mit Zitat      
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

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2014, 10:27     Titel:
  Antworten mit Zitat      
Hallo,

wie genau hast du find verwendet, und was willst du damit erreichen?

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

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2014, 10:33     Titel:
  Antworten mit Zitat      
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,Smile)= 0
find(R(2,Smile)= 3
...
find(R(8,Smile)=1 2 3


Aber stattdessen erhalte ich jeweils:
find(R(1,Smile) = 1 2 3
find(R(2,Smile) = 1 2 3
...
find(R(8,Smile) = 1 2 3

Leider funktioniert "findstr(..)" auch nicht...
 
Lena96

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 19.04.2014, 10:34     Titel:
  Antworten mit Zitat      
ich hätte die smilies daktivieren sollen... das soll natürlich jeweils z.B. heißen:

( 1, : )
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.04.2014, 10:53     Titel:
  Antworten mit Zitat      
Hallo,

die Daten sind vom Datentyp char. Was gehen würde:

Code:
find(R(1,:) == '1')
find(R(2,:) == '1')
...
find(R(8,:) == '1')


Wenn du lieber mit einer echten Matrix von 0 und 1 arbeiten willst, hilft
Code:


Noch besser als Smilies deaktivieren ist die Code-Umgebung Smile

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Lena96
Forum-Anfänger

Forum-Anfänger


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

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 19.04.14
Wohnort: ---
Version: R2013a
     Beitrag Verfasst am: 28.04.2014, 08:46     Titel:
  Antworten mit Zitat      
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.
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 28.04.2014, 09:17     Titel:
  Antworten mit Zitat      
Hallo Lena96,

Ein Tipp:

Zitat:
für k=2:
110
011
101

Sieh Dir dazu mal die Ausgabe hiervon an:
Code:

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
Private Nachricht senden Benutzer-Profile anzeigen
 
Lena96
Forum-Anfänger

Forum-Anfänger


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