2016-03-04 2 views
1

У меня есть три вектора centers, radiuses, metrics все Nx1 (centers - Nx2, но это не проблема). И я хочу преобразовать их в вектор Nx1 структур, где каждая структура имеет поля: center, radius, metric и соответствующие значения этих полей, например structArray(i).metric == metrics(i). Каков наилучший и самый простой способ сделать это?Массивы массива структуры. MATLAB

ответ

2

Вы можете использовать конструктор struct непосредственно путем преобразования данных в массивы ячеек.

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

Обратите внимание на использование вход для измерения num2cell, чтобы преобразовать переменную centers в NX1 массив 1х2 клеток.

Если мы попытаемся это с какой-то пример данных:

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

Используйте следующее:

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

Примечание, что накладные расходы (с точки зрения потребления памяти) такого подхода очень высока. Если ваши массивы CENTERS, RADIUSES и METRICS очень велики, лучше использовать «плоскую» схему памяти, т. Е. Хранить массивы в одной структуре:

S = struct; 
S.centers = centers; 
S.radiuses = radiuses; 
S.metrics == metrics; 
Смежные вопросы