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

Alle möglichen spaltenbezogenenen Kombinationen einer Matri

 

Kabbi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 08:48     Titel: Alle möglichen spaltenbezogenenen Kombinationen einer Matri
  Antworten mit Zitat      
Hallo liebes Forum,

ich zerbrüte mit schon seit ein paar Tagen den Kopf wie ich folgendes Problem lösen kann.

Ich habe eine 7xn-Matrix, wobei n meist eine Zahl zwischen 5 und 11 ist.
Z.B. folgende Matrix (n=5):

A=
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
6 7 8 9 10
7 8 9 10 11

Jetzt hätte ich gerne alle möglichen Zeilenkombinationen aus den Spaltenelementen in einer langen Matrix. Es soll auszugshaft so aussehen:

1 2 3 4 5
1 2 3 4 6
1 2 3 4 7
1 2 3 4 8
1 2 3 4 9
1 2 3 4 10
1 2 3 4 11
1 2 3 5 5
1 2 3 5 6
1 2 3 5 7
1 2 3 5 8
1 2 3 5 9
1 2 3 5 10
1 2 3 5 11
1 2 3 6 5
1 2 3 6 6
1 2 3 6 7
1 2 3 6 8
1 2 3 6 9
1 2 3 6 10
1 2 3 6 11
.
.
.
7 8 9 10 5
7 8 9 10 6
7 8 9 10 7
7 8 9 10 8
7 8 9 10 9
7 8 9 10 10
7 8 9 10 11

Die Matrix hat am Ende also eine Länge von 7 hoch n, in diesem Beispiel 7^5=16807 Zeilen.
(schafft Matlab auch 7^11=1.977E+09 ?)

Ich hab das ganze mit for-Schleifen versucht zu lösen, aber scheitere dann doch immer.

Habt ihr ne Idee, wie ich diese lange Matrix erhalten könnte?


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 09:08     Titel:
  Antworten mit Zitat      
ich bin noch nicht ganz durch deine bildungsforschrift durchgestiegen.
Zitat:
etzt hätte ich gerne alle möglichen Zeilenkombinationen aus den Spaltenelementen
versteh ich nicht.
wie entsteht zb 1 2 3 4 6 ?
kannst du das nochmal anders erklären?
wie viele daten du in einer matrix speichern kannst hängt vom betriebssystem (32 64 bit ) und deinem ram ab.
die maximale größe für eine array kannst du mit dem befehl
Code:
rausfinden. bei mir zb 60486mb was dann 7.9275e+009 double werten entspricht. wobei da aber auch die swapfile dabei ist und das programm schon sehr langsam werden würde in dem bereich.
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kabbi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 10:08     Titel:
  Antworten mit Zitat      
Also ich möchte folgendes:

Nimm ein beliebiges Element aus der ersten Spalte, eins aus der zweiten, eins aus der dritten, eins aus der vierten und eins aus der fünften.

Davon dann alle möglichen Kombinationen.

Meine lange beispielhafte Ergebnismatrix geht dabei natürlich systematisch vor. Es beginnt mit den ersten Zeilenelementen jeder Spalte. In den ersten 7 Zeilen wird dann die letzte Spalte hochgezählt. Ist diese bei 11, wird dann in der 4. Spalte hochgezählt, die 5. beginnt wieder bei 5.
Nach 48 (7x7) Zeilen ist dann auch die 4. Spalte hochgezählt, wodurch dann die 3. Spalte um eins erhöht wird usw.
Ganz am Ende sind dann quasi alle Spalten hochgezählt und ich hab dazwischen alle möglichen Kombinationen, z.B. auch 6 2 6 7 6 (das ist also das 6. Element der 1. Spalte, 1. Element der 2. Spalte, 4. Element der 3. Spalte, 4. Element der 4. Spalte und 2. Element der 5. Spalte.

Weißt du jetzt was ich meine? Es ist quasi wie jedes Zahlensystem, z.B. das dezimale. Nach der 899 kommt die 900. Ich hab die Einer hochgezählt, da dieser beim Maximum ist, geht die Zehnerstelle auch eins nach oben, diese ist auch beim Maximum, als geht auch die Hunderterstelle eins hoch. Nun zählt wieder der einer hoch, bis nach zehn mal hochzählen auch die Zehnerstelle wieder eins hochgeht usw.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 10:21     Titel:
  Antworten mit Zitat      
also sowas?
Code:

A=[1,2,3,4,5;...
2,3,4,5,6;...
3,4,5,6,7;...
4,5,6,7,8;...
5,6,7,8,9;...
6,7,8,9,10;...
7,8,9,10,11];
iline=1;
B=nan(7^5,5);
for a=1:7
    for b=1:7
        for c=1:7
            for d=1:7
                for e=1:7
                B(iline,:)=[A(a,1),A(b,2),A(c,3),A(d,4),A(e,5)];
                iline=iline+1;
                end
            end
        end
    end
end

mann könnte das vieleicht auch recursiv lösen um den quelltext nicht immer anpassen zu müssen wenn sich die dimension von A ändert
_________________

richtig Fragen

Zuletzt bearbeitet von Winkow am 25.07.2013, 10:24, insgesamt 2-mal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen
 
Kabbi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 10:22     Titel:
  Antworten mit Zitat      
7x7 ist natürlich 49 Embarassed

Mir ist grad noch eingefallen wie es noch einfach zu verstehen ist. Ich benutz einfach eine einfacherer Beispielmatrix (jetzt mal 3x3):
A=
1 1 1
2 2 2
3 3 3

Meine Ergebnismatrix soltle dann folgendermaßen aussehen:
1 1 1
1 1 2
1 1 3
1 2 1
1 2 2
1 2 3
1 3 1
1 3 2
1 3 3
2 1 1
2 1 2
2 1 3
2 2 1
2 2 2
2 2 3
2 3 1
2 3 2
2 3 3
3 1 1
3 1 2
3 1 3
3 2 1
3 2 2
3 2 3
3 3 1
3 3 2
3 3 3

Jetzt sollte es klar sein oder?
 
Kabbi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 10:29     Titel:
  Antworten mit Zitat      
Ja genau so, danke du bist mein Held^^

Mir fehlte eigentlich am Ende nur das
B(iline,Smile=[A(a,1),A(b,2),A(c,3),A(d,4),A(e,5)];
das hab ich einfach net hinbekommen^^

Eien frage hätte ich aber noch: Das ganze ist ja jetzt für den Fall das ich 5 Spalten hab. Kann man auch das iwie so schreiben, dass sie spaltenanzahl variabel ist? (wie gesagt zwischen 5 und 11)? Die Anzahl der Spalten ist ja gleich der Anzahl der nötigen for-Schleifen. Kann man sowas überhaupt automatisieren?

Ich kann natürlich auch einfach für jeden Fall von 5 bis 11 das for-Schleifen-Konstrukt separat schreiben.
 
Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 25.07.2013, 10:49     Titel:
  Antworten mit Zitat      
Code:

A=[1,2,3,4,5,6;...
2,3,4,5,6,7;...
3,4,5,6,7,8;...
4,5,6,7,8,9;...
5,6,7,8,9,10;...
6,7,8,9,10,11;...
7,8,9,10,11,12];

B=nan(7^size(A,2),size(A,2));
for k=1:size(A,2);
    B(:,k)=repmat(reshape(repmat(A(:,k)',7^(size(A,2)-k),1),[],1),7^(k-1),1);
end
 

wäre jetzt meine lösung gewesen
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
Kabbi

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 25.07.2013, 10:58     Titel:
  Antworten mit Zitat      
Ah das ist natürlich auch clever.
Darauf wär ich so fix nicht gekommen. Vielen vielen Dank für deine Hilfe Very Happy
 
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.