wie man eine sehr große Matrix mit Matlab erstellt

8

Ich habe ein Problem mit Matlab, wenn ich versuche, eine Matrix mit einer sehr großen Größe wie 40000x40000 zu erstellen.

zum Beispiel:

x = Nullen (40000,40000);

Die Fehlermeldung lautet: "Die vom Programm zulässige maximale Variablengröße ist überschritten."

Gibt es eine Lösung?

Auch ich habe eine andere Frage, können wir eine Matrix mit variabler Spaltengröße wie in Java haben.

    
osama alia 02.02.2010, 11:14
quelle

7 Antworten

16

40000 * 40000 * 8 Bytes pro Nummer = 12 GB, sicherlich haben Sie nicht genug Speicher.

Um eine riesige Matrix mit vielen Nullen zu erstellen, benötigen Sie eine spärliche Matrix :

%Vor%

Um ein Array von Varianten zu erstellen, können Sie ein Zellen-Array verwenden:

%Vor%     
kennytm 02.02.2010 11:23
quelle
4

Es gibt viele Dinge, die Sie tun können, wie die verschiedenen Antworten darauf hinweisen. Die richtige Antwort hängt von Ihrem tatsächlichen Problem ab. Brute-Force-Erstellung eines so großen Arrays ist ohne eine 64-Bit-Version von Matlab nicht möglich, plus genug Speicher, um dieses große Array zu speichern oder das Array auf andere Weise zu speichern. Sie können das Array offline speichern und nur das einbringen, was Sie benötigen, wenn Sie es verwenden.

Wenn beispielsweise diese Zahlen immer kleine Ganzzahlen sind, verwenden Sie uint8 oder int8 oder ein logisches Array, sogar ein einzelnes Array, wodurch die Speicheranforderungen im Vergleich zu Double-Arrays reduziert werden. Oder verwenden Sie je nach Bedarf ein Sparse-Speicherformular. Viel hängt davon ab, was Sie mit dem Array tun werden.

Verwenden Sie für eine variable Anzahl von Elementen in einer Zeile ein Zellenarray und kein herkömmliches Array.

    
user85109 02.02.2010 14:34
quelle
3

Wenn Sie wirklich eine so große Matrix benötigen, können Sie die Parallel Computing Toolbox (und der MATLAB Distributed Computing Server ), um den Speicher mehrerer zu nutzen Maschinen gleichzeitig. Dies würde Ihnen erlauben zu schreiben:

%Vor%

Siehe auch: doc für verteilte Arrays

    
Edric 02.02.2010 13:31
quelle
1

40k * 40k = & gt; 1.6 * 10 ^ 9 Zahlen. Ich glaube, dass Zeros Floats zurückgeben werden. Sie müssten also etwa 1,6 * 10 ^ 9 Floats * 4 Bytes / Float = & gt; 6,4 GB RAM nur für diese eine Variable ...

Sind Sie sicher, dass Sie ein so großes Array brauchen?

    
nuriaion 02.02.2010 11:20
quelle
1

Eine Möglichkeit, das Speicherproblem zu umgehen, könnte sein, eine Matdatei für Ihre Matrix zu erstellen. Ich verstehe es so, dass es den Speicher überspringt und direkt auf die Festplatte schreibt. Ich habe das für Matrizen versucht, die zu groß für den Speicher meines muffigen Computers waren, und es war langsam, aber es hat funktioniert. Du musst es wahrscheinlich ein bisschen nach dem anderen aufbauen.

    
Adjwilley 23.01.2015 02:28
quelle
0

Nein, nun ja, kaufe mehr RAM, wie unten erwähnt. Sparse entfernt nur null Elemente.

Und in Matlab können Sie einfach die neuen Spalten / Zeilen an die Matrix anhängen, um eine größere Matrix zu erstellen.

Ah, aber Sie meinen, können Sie eine Matrix haben, wo eine Spalte 10 Zeilen und eine andere beispielsweise 20 ist. Nein, das kannst du nicht tun. Dachte nicht, dass du in Java tbh. Könntest.

    
NimChimpsky 02.02.2010 11:23
quelle
0

Ich denke, verwenden Sie Festplatten-Dateien zum Speichern dieser Daten ist die beste Wahl

    
JJgogo 05.02.2010 03:29
quelle

Tags und Links