Bonjour à tous.
En ce moment, je code en poo avec matlab.
J'aimerais stocker une liste d'objet.
Au départ j'utilisais une structure du type
mais à chaque itération de la boucle, l'affectation prenait de plus en plus de temps (observé grâce à tic et toc). Je me suis alors interessé à la pré allocation de mémoire étant donné que je connais à l'avance la taille de mon vecteur C.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 for i=1:n C(i)= monObjet; end
1er pb : Ne sachant pas comment pré allouer de l'espace pour un vecteur/matrice de taille(1,n), j'ai utilisé les cell Arrays:
mais j'ai chronometré et cela me prend autant de temps que de ne pas initialiser la cell C avant de rentrer dans la boucle.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 C = cell(1,n) for i=1:n C{i} = monObjet; end
En effet, testez :
avec
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 classdef Objet < handle properties attribut end methods function obj = Objet(attribut) obj.attribut = attribut; end end
et vous obtiendrez le même temps à peu de chose.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 clear; tic; for i=1:1000 C{i}=Objet(attribut); end toc tic C = cell(1, 1000); for i=1:1000 C{i}=Objet(attribut); end toc
Alors que pour un nombre classique, initialiser la cell à cell(1,n) avant la boucle est effectivement avantageux :
Cela viendrait donc de l'instanciation d'objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 clear; tic; for i=1:1000 C{i}=i; end toc tic C = cell(1, 1000); for i=1:1000 C{i}=i; end toc
Pourquoi instancier un objet prendrait-il de plus en plus de temps au fur et a mesure que la boucle s'execute?
Voyez-vous une explication à cela ?
Avez-vous une solution pour réduire le temps de calcul ?
Clem
Partager