Существует по крайней мере два способа организации данных в массиве структур: plane organization и element-by-element organization. Метод, который лучше всего подходит для ваших данных, зависит от того, как вы планируете получить доступ к данным, и, для очень больших наборов данных, есть ли у вас ограничения системной памяти.
Организация плоскости позволяет более легкий доступ ко всем значениям в поле. Организация элемента за элементом позволяет более легкий доступ ко всей информации, связанной с одним элементом или записью. В следующих разделах приведен пример организации каждого типа:
Когда вы создаете массив структур, MATLAB® сохраняет информацию о каждом элементе и поле в заголовке массива. В результате структуры с большим количеством элементов и полей требуют большей памяти, чем более простые структуры, которые содержат одни и те же данные.
Рассмотрим изображение RGB с тремя массивами, соответствующими значениям интенсивности цвета.
Если у вас есть массивы RED
, GREEN
, и BLUE
в рабочей рабочей области эти команды создают скалярную структуру с именем img
который использует организацию плоскости:
img.red = RED; img.green = GREEN; img.blue = BLUE;
Организация плоскости позволяет вам легко извлечь целые плоскости изображения для отображения, фильтрации или другой обработки. Для примера умножьте красные значения интенсивности на 0.9
:
adjustedRed = .9 * img.red;
Если у вас несколько изображений, можно добавить их в img
структуру, так что каждый элемент img(1),...,img(n)
содержит целое изображение. Пример добавления элементов к структуре см. в следующем разделе.
Рассмотрите базу данных с информацией о пациентах. Каждая запись содержит данные о имени пациента, результатах теста и сумме расчета.
Эти операторы создают элемент в массиве структур с именем patient
:
patient(1).name = 'John Doe';
patient(1).billing = 127.00;
patient(1).test = [79, 75, 73; 180, 178, 177.5; 220, 210, 205];
Дополнительные пациенты соответствуют новым элементам структуры. Например, добавьте элемент для второго пациента:
patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68, 70, 68; 118, 118, 119; 172, 170, 169];
Организация элемента за элементом поддерживает простое индексирование для доступа к данным для конкретного пациента. Например, найдите среднее значение результатов первого теста пациента, вычисляя по строкам (размерность 2
), а не столбцами:
aveResultsDoe = mean(patient(1).test,2)
Этот код возвращает
aveResultsDoe = 75.6667 178.5000 212.0000