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
1
A
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;