Verfasst am: 04.05.2019, 11:40
Titel: Wie groß können Matritzen sein in Matlab ?
Hallo,
ich habe mal eine Frage bezüglich des Speicherplatzes von Matritzen.
Ich habe eine 20.000 x 20.000 Matrix X und will diese mit einer ebenso großen Matrix Y verbinden (ganz normal über A=[X,Y])
Wenn ich die Matrix X erzeuge, macht er es ziemlich schnell, aber beim verbinden hängt er sich immer auf und es klappt nichts mehr.
Jedes Mal stürzt Matlab ab.
Was kann man denn da tun und woran kann das liegen ?
Irgendwas am Speicher ?
Ich will dann später eine 40.000 x 40.000 Matrix haben, aber erstmal wäre die 20.000 x 40.000 ganz schön.
Liebe Grüße und ein tolles WOchenende wünsche ich euch !
Anzahl Elemente * 8 (ein Double braucht 8 Byte) ergibt den Speicherbedarf. Die große Matrix benötigt also rund 6,4 GB, und mit den beiden kleineren bist du bereits bei 12,8 GB. Du benötigst also entsprechend viel Arbeitsspeicher.
Ein wenig Linderung kann die Wahl eines anderen Datentyps (single, uint8 etc., je nach Daten) schaffen.
Interessehalber: was soll denn mit den Daten gemacht werden? Durchschauen kann man das ja schlecht.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
vielen Dank, mir war gar nicht bewusst wie groß das dann wird. Aber das macht dann Sinn, dass es dann schnell mal abbricht. Ich erzeuge die matrix für ein Optimierungsproblem und in diesem werden dann die Nebenbedingungen gespeichert. In der matrix stehen aber Nur 0en, 1en und ein paar wenige Zahlen wie 2,3 und 4,aber alles integer. Wie kann ich denn dafür den sparsamsten Datentyp auswählen und welcher wäre das? Double ist ja unnötig.
Liebe Grüße und vielen Dank für deinen schnellen Hinweis!
dafür solltest du dünnbesetzte Matrizen (
sparse
) verwenden. Dann werden nur die von 0 verschiedenen Einträge und deren Position gespeichert.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
interessehalber: wie löst du das zugehörige Optimierungsproblem?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hallo, das ist mein nächstes Problem, wie ich grade gesehen habe. Ich wollte es über Cplex machen, also mit der Funktion cplexlip(linear integer Problem) aber er hat mir nach 2h noch kein Ergebnis ausgespuckt. Jetzt bin ich am suchen und überlegen, was man da alternativ machen könnte. Hast du denn Ideen? Die Nebenbedingungen sind leider so groß und es sind leider zu viele. Wie kann man das denn schnell lösen?
so aus dem Stand schwer zu sagen.
Bei 20000 (bzw. 40000?) Variablen gibt es sicher eine stark ausgeprägte Problemstruktur. Vielleicht kann man die in irgendeiner Form besser nutzen?
Bei den Größenordnungen würde ich aber auf jeden Fall nicht erwarten, dass das schnell geht. Vielleicht mal über Nacht laufen lassen und schauen, was passiert?
Falls hinsichtlich der Art der Nebenbedingungen passt, würde ich auch mal intlinprog versuchen.
Vielleicht noch iterativen Output einschalten, damit man sieht, was passiert.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Okay, dankeschön für den Hinweis. Was ist das denn mit diesem iterativen output? Und wie kann man das anstellen?
Noch eine andere frage: so ein lineares Problem wird doch eigentlich immer von branch and bound gelöst, oder? Kann man die vielleicht die Anzahl der Schritte irgendwo nachverfolgen?
Danke für deine ganzen Tips und Hilfen!
Kann man die vielleicht die Anzahl der Schritte irgendwo nachverfolgen?
Beim iterativen Output ;) Siehe oben.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
ich habe das mal probiert und bin immer noch nicht wirklich weiter.
Ein Ansatz hätte ich aber noch:
Ich kann auch cplexbilp(prob) machen und dann muss ich prob als structure definieren. Wie kann ich denn dieses Optimierungsproblem als structure definieren, damit ich dann am Ende loesung = cplexbilp(prob) verwenden kann ?
Kann ich es dann so in der Art machen:
Da habe ich jetzt mehrere Nebenbedingungen, und die anderen Sachen habe ich auch da als Input, aber wenn ich jetzt loesung = cplexbilp(prob) mache, sagt er mir:
Code:
CPLEX could not extract data from matlab due to data type mismatch.
ich habe das mal probiert und bin immer noch nicht wirklich weiter.
Heißt... was?
Ich kenne CPLEX nicht, insofern kann ich wenig dazu sagen.
Der spärlichen Doku nach, die ich gefunden habe, wird die von dir verwendete Syntax einfach nicht unterstützt. Du erzeugst ein OptimizationProblem Objekt, unterstützt werden aber nur Strukturen oder einzelne Inputs.
https://www.ibm.com/support/knowled.....lex/html/cplexbilp-m.html
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Okay und es macht bestimmt keinen Unterschied ob ich eine Struktur nehme oder die Funktion direkt, aber mir kam noch eine andere gute Idee.
Diese Sachen werden ja über Branch and Bound gelöst und wie ist es denn mit dem Anfangswert ? Wenn ich dort schon einen guten Anfangswert reinstecke, dann werden doch evtl schon einige Möglichkeiten nicht betrachtet, oder ?Also je besser mein x_0 desto schneller sollte es doch gehen, oder ?!
Oder kann ich was an den Nebenbedingungen machen um es evtl. schneller zu machen ?
Kannst du dir da ein paar Sachen vorstellen ?
Denn wenn ich einen niedrigen Funktionswert beim x_0 schon habe, dann geht der doch einige Äste evtl gar nicht durch, oder ?
Providing x0 can change the amount of time intlinprog takes to converge. It is difficult to predict how x0 affects the solver. For suggestions on using appropriate Heuristics with x0, see Tips.
x0 must be feasible with respect to all constraints.
Es ist naheliegend, dass das bei CPLEX ähnlich ist. Ich kenne CPLEX aber wie gesagt nicht, und dokumentiert ist es leider recht knapp.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Ja das es recht knapp dokumentiert ist, nervt mich auch. Aber mal sehen ob ich das mit einem guten Startwert etwas beschleunigen kann.
Ich melde mich wenn ich wieder mal irgendwo nicht durchblicke.
Vielen Dank für deine andauernde Hilfe !
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
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.