About preallocating for speed
2 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
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!!
0 commentaires
Réponse acceptée
James Tursa
le 30 Nov 2017
Modifié(e) : James Tursa
le 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
0 commentaires
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Loops and Conditional Statements dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!