2016-06-13 1 views
0

Je voudrais créer un tableau de structure, chacun d'eux aura 4 champs qui seront un tableau de longueur indéterminée. Je prévois, en fait, d'insérer dans ce tableau les données qui seront déjà chargées dans le format struct.MATLAB: comment allouer un tableau de données de structure

for j:1:N_data 

    my_struct_data=load([my_file_name '_' j]); 

    my_array_list(j)=my_struct_data; 

end 

Quelle est la meilleure façon de préallouer ma matrice de données de structure?

Nous vous remercions à l'avance

+0

est-ce que vous voyez une énorme baisse de performance en faisant cela? Cela peut ne pas être nécessaire. –

+0

effectivement pas beaucoup mais peut-être que j'utilise trop peu de données –

Répondre

1

Vous pouvez pré-allouer quelques façons:

  1. Utiliser des réseaux de cellules vides lors de la création du struct qui sont la taille que vous voulez que le tableau de struct soit.

    mystruct = struct('field1', cell(N_data, 1), ... 
            'field2', cell(N_data, 1), ... 
            'field3', cell(N_data, 1), ... 
            'field4', cell(N_data, 1)); 
    
  2. Assignez simplement l'élément « dernier » dans le tableau struct qui provoquera Matlab pour créer tous les autres structs et remplir tous les champs avec []

    mystruct(N_data, 1) = struct('field1', {'1'}, 'field2', {'2'}, ... 
              'field3', {'3'}, 'field4', {'4'}); 
    
  3. Créer une struct « par défaut » et l'utilisation repmat pour l'agrandir à la bonne taille. Ceci fera que tous les champs structs auront les mêmes champs (non []) jusqu'à ce qu'ils soient modifiés.

    template.field1 = '1'; 
    template.field2 = '2'; 
    template.field3 = '3'; 
    template.field4 = '4'; 
    
    mystruct = repmat(template, [N_data, 1]); 
    

Dans votre cas, un petit truc que vous pourriez faire qui est similaire à # 2 serait simplement inverser l'ordre de votre boucle afin que vous remplissez le dernier élément du tableau de struct premier . Cela va automatiquement pré-allouer tout la première fois à travers la boucle.

for k = flip(1:N_data) 
    my_struct_data = load([my_file_name '_' num2str(k)]); 
    my_array_list(k) = my_struct_data; 
end 
+0

merci pour l'aide! –