La raison pour laquelle les structures de votre exemple ne sont pas initialisées correctement est que la syntaxe que vous utilisez n'adresse que le dernier élément du tableau struct. Pour un tableau inexistant, le reste d'entre eux est implicitement rempli avec des structs qui ont la valeur par défaut []
dans tous leurs champs.
Pour rendre ce comportement clair, essayez de faire un tableau court avec clear edges; edges(1:3) = struct('weight',1.0)
et regardant chacun des edges(1)
, edges(2)
et edges(3)
.L'élément edges(3)
a 1.0
dans son poids comme vous voulez; les autres ont []
.
La syntaxe pour initialiser efficacement un tableau de structures est l'une d'entre elles.
% Using repmat and full assignment
edges = repmat(struct('weight', 1.0), [1 1000]);
% Using indexing
% NOTE: Only correct if variable is uninitialized!!!
edges(1:1000) = struct('weight', 1.0); % QUESTIONABLE
Notez le 1:1000
au lieu de simplement 1000
lors de l'indexation dans le tableau des bords non initialisée.
Il y a un problème avec le formulaire edges(1:1000)
: si edges
est déjà initialisé, cette syntaxe mettra simplement à jour les valeurs des éléments sélectionnés. Si les bords ont plus de 1000 éléments, les autres seront laissés inchangés, et votre code sera bogué. Ou si edges
est un type différent, vous pourriez obtenir une erreur ou un comportement étrange en fonction de son type de données existant. Pour être sûr, vous devez faire clear edges
avant d'initialiser en utilisant la syntaxe d'indexation. Il est donc préférable de faire une affectation complète avec le formulaire repmat
. Quelle que soit la façon dont vous l'initialisez, un tableau de structures comme celui-ci sera toujours lent à travailler avec des ensembles de données plus volumineux. Vous ne pouvez pas effectuer de véritables opérations "vectorisées" car vos tableaux primitifs sont tous fragmentés pour séparer mxArrays dans chaque élément struct. Cela inclut l'assignation de champ dans votre question - il n'est pas possible de le vectoriser. Au lieu de cela, vous devriez changer une structure de tableaux comme suggère la réponse de Brian L.
cet article peut être utile: http://stackoverflow.com/questions/4166438/how-do-i-define-a-structure-in-matlab/4169216#4169216 – Amro