About preallocating for speed

2 visualizzazioni (ultimi 30 giorni)
Saf el
Saf el il 30 Nov 2017
Modificato: James Tursa il 30 Nov 2017
There is a " for loop" in my program and Matlab gives me a suggestion to consider "Preallocating" for speed. I want to learn how to do it. This is my code:
A = [];
for i = 1:size(P,2)
Ai = build_matrix(P(:,i));
*A* = [A; Ai];
end
there is a red line under A on Bold saying that The size of the indicated variable or array appears to be changing with each loop iteration. Could you guys tell me what should I do to solve it. Thanks!!

Risposta accettata

James Tursa
James Tursa il 30 Nov 2017
Modificato: James Tursa il 30 Nov 2017
This depends on what the size and class of the matrix returned by build_matrix( ) is. E.g., suppose it returns an MxN double matrix. Then the pre-allocation and the assignments would look like this:
A = zeros(size(P,2)*M,N); % pre-allocate result
for i = 1:size(P,2)
A(1+(i-1)*M:i*M,:) = build_matrix(P(:,i)); % modify the way you do the assignment
end

Più risposte (0)

Categorie

Scopri di più su Loops and Conditional Statements in Help Center e File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by