About preallocating for speed

1 view (last 30 days)
Saf el
Saf el on 30 Nov 2017
Edited: James Tursa on 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!!

Accepted Answer

James Tursa
James Tursa on 30 Nov 2017
Edited: James Tursa on 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

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!