2017-04-25 1 views
1

J'ai deux questions:allocation dynamique de la mémoire dans MATLAB

  1. Quelle est la Matlab équivalent de l » realloc()C? Est-ce reshape()?
  2. Comment puis-je initialiser un vecteur MALTAB qui peut être utilisé pour ajouter de manière incrémentale de nouveaux éléments de type objet/structure?

Par exemple, my_vector = zeros(1, N) ne peut pas être utilisé dans le cas d'objets/structs, non?

Répondre

1

Dans MATLAB, l'allocation de mémoire est automatique. À savoir, l'ajout d'éléments d'un vecteur effectue automatiquement une realloc

x = [ 1 2 3 ]; 
x(4) = 4; % performs realloc 
% now x == [1 2 3 4] 

x(2) = []; % deletes element 2 
% now x == [1 3 4] 

Pour créer un tableau d'objets utilisés repmat I dans le passé. Puisqu'un objet dans le cas général doit être construit à partir de certaines données, j'ai trouvé que la réplication est souvent la meilleure si rien d'autre n'est connu sur une classe. Pour créer un tableau de 2x3x4 d'objets construits par défaut de la classe CLS, utilisez

x = repmat(CLS(), [ 2 3 4]) 

J'ai trouvé plus approprié que l'écriture

x = CLS(); 
x(2,3,4) = CLS(); 

qui serait probablement aussi travailler mais il est difficile à lire et pourrait probablement subtile bogues si la classe n'est pas implémentée correctement.

struct s peuvent également être créés avec repmat, ou, en variante, en fournissant des ensembles de cellules à la fonction constructeur struct, par exemple,

x = struct('a', { 1 2 3}, 'b', { 5 6 7}); 
% now x is a 1x3 struct array