2016-03-04 1 views
1

J'ai trois vecteurs centers, radiuses, metrics tous Nx1 (centers est Nx2, mais ce n'est pas un problème du tout). Et je veux les convertir en vecteur Nx1 de structures où chaque structure a des champs: center, radius, metric et les valeurs correspondantes de ces champs, comme structArray(i).metric == metrics(i). Quelle est la meilleure et la plus simple façon de faire cela?Arrays au tableau de struct. MATLAB

Répondre

2

Vous pouvez utiliser le constructeur struct directement en convertissant vos données en grappes de cellules.

structArray = struct('center', num2cell(centers,2), ... 
        'radius', num2cell(radiuses), ... 
        'metric', num2cell(metrics)); 

Notez l'utilisation de l'entrée de dimension de num2cell pour convertir la variable centers dans un tableau de Nx1 de cellules de 1x2.

Si nous essayons cela avec quelques exemples de données:

radiuses = rand(3,1); 
metrics = rand(3,1); 
centers = rand(3,2); 

structArray = struct('center', num2cell(centers,2), ... 
        'radius', num2cell(radiuses), ... 
        'metric', num2cell(metrics)); 

structArray = 

3x1 struct array with fields: 

    center 
    radius 
    metric 
1

Utilisez les éléments suivants:

S = struct('centers', num2cell(centers), 'radiuses', num2cell(radiuses), ... 
    'metrics', num2cell(metrics)); 

Notez que les frais généraux (en termes de consommation de mémoire) de cette approche est très élevée. Si vos tableaux CENTERS, RADIUSES et METRICS sont très volumineux, il est préférable d'utiliser la disposition de mémoire "plate", c'est-à-dire de stocker les tableaux en une seule structure:

S = struct; 
S.centers = centers; 
S.radiuses = radiuses; 
S.metrics == metrics;