2016-05-11 13 views
1

Ich möchte eine 36 * 45-dimensionale Matrix in MATLAB erstellen, aber die Spalten werden in einer Schleife gefüllt. Zu Beginn habe ich nur eine Matrix von 36 * 1 als Anfangswerte, die in der ersten Spalte zu füllen sind, und nach und nach, indem ich die Schleife durchführe, werden die restlichen Spalten gefüllt. Es ist wichtig zu wissen, dass die Größe der großen Matrix (36 * 45) von Anfang an bekannt sein sollte.Wie erstellt man eine große Matrix in MATLAB und füllt sie schrittweise in einer Schleife?

Antwort

1

Sie müssen etwas über MATLAB Grundlagen lernen. Ich schlage vor, dass Sie das tun. Der Code würde wie folgt aussehen:

A=zeros(36,45); 

for ii=1:size(A,2); 
    A(:,ii) = %here comes a 36x1 matrix 
end 

hier über Matrix Indizierung Lernen: https://uk.mathworks.com/company/newsletters/articles/matrix-indexing-in-matlab.html?refresh=true

+0

Ändern Sie einfach A (:, 1) zu A (:, ii). Ich würde die Bearbeitung selbst tun, aber so beschwert sich über die Bearbeitung zu kurz sein :) – Chris

+0

@Chris danke, tat dies in Eile –

2

Manchmal fülle ich die Matrix in rückwärts. Dies verhindert die Notwendigkeit einer separaten Zuweisungsleitung, und manchmal ist es ein wenig einfacher. (ZB wenn in einer Anordnung von Strukturen mit unbestimmten Felder ausfüllen)

die wie folgt aussieht:

for ix = numColumns:-1:1 
    results(:,ix) = <function generating results>; %No pre-allocation required 
end 

Unrelated aber interessante Seite Kommentar unten

Für einige eher bizarre Gründe, Ich denke, das ist eigentlich etwas schneller als ein zeros() Aufruf für sehr große Matrizen. Sie können dies sehen, indem Sie die folgenden Vergleich:

tic; for ix=1:1000; x = zeros(1000); end; toc 
%1.18 second on my current computer 

tic; for ix=1:1000; clear('y'); y(1000,1000)=0; end; toc 
%0.032 seconds on my current computer 

er eine gute Beschreibung der Ursache für diese irgendwo auf Stackoverflow gesehen habe, aber es kann nicht sofort finden.

+0

Nein ist es nicht. Vorabzuweisen ist * immer * schneller. –

+1

Beim Rückwärts-Iterieren wird beim ersten Mal eine vollständige Zuweisung durch die Schleife ausgeführt. Dies bietet alle Vorteile der Vorabzuweisung. Die bizarre Beschleunigung ist ein Effekt zweiter Ordnung, der verursacht wird, weil 'x = Nullen (n)' merklich langsamer ist als 'x (n, n) = 0', für große Werte von 'n'. – Pursuit

+0

humm Es kann sein. Allerdings ist es auch versionsspezifisch. –

Verwandte Themen