|
|
|||||||||||||||||||||||||||||||||
|
|
||||||||||||||||||||||||||||||||
|
|||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||
| Вход | |||||||||||||||||||||||||||||||||
|
Раздел "MATLAB\MATLAB"
В.Г.Потемкин "Введение в Matlab" (v 5.3) В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель 6.4. Организация данных. Вложенные структуры. Многомерные массивы структур Ключ к организации структуры состоит в указании способа доступа к элементам сруктуры. Это, в свою очередь, определяет, как надо формировать массив записей и его поля. Рассмотрим RGB-изображение размером 128x128 пикселей, записанное в трех массивах: RED, GREEN, BLUE:
Рис. 6.4 Имеются, по крайней мере, два способа организации этих данных в структуру, как это показано на рис. 6.5 а, б.
а) б) Рис. 6.5 Матричная организация. В этом случае каждое поле структуры - это массив координат точек одного цвета. Такую структуру можно создать, используя следующие присваивания A.r = RED; Этот подход позволяет выделить целые массивы для отображения, фильтрации или выполнения других функций над изображением. В этом случае, чтобы получить доступ к множеству точек красного цвета, надо всего лишь воспользоваться присваиванием red_plane = A.red; Матричная организация имеет преимущества при работе со множеством изображений, когда эти изображения можно накопить в виде массивов A(2), A(3), ….. , содержащих целые образы. Недостаток такой организации очевиден, когда требуется получить доступ к подмассиву массива цветов. Для того чтобы получить доступ к подобразу, необходимо получить доступ к определенным участкам поля структуры, например, таким red_sub = A.r(2:12, 13:30); Поэлементная организация. В этом случае определение отдельных элементов данных реализуется в виде циклов for i = 1:size(RED, 1) При такой организации доступ к подмножеству данных может быть выполнен с помощью оператора присваивания Bsub = B(1:10,1:10); . Однако, чтобы получить доступ к матрице, требуется организовать цикл: red_plane = zeros(128, 128); Поэлементная организация - не лучший выбор для приложений, связанных с обработкой изображений; однако он может оказаться предпочтительным, когда необходим доступ к отдельным участкам полей. Следующий пример демонстрирует преимущества такого подхода. Пример.
а) б) Рис. 6.6 Каждая из них имеет свои преимущества и недостатки:
Пример.
Пример. Вызов функции client должен быть организован следующим образом: Поэлементная организация упрощает работу со строками переменной длины. В случае матричной организации, если априори неизвестна максимальная длина строки, придется многократно определять размеры полей name или address, чтобы разместить более длинные строки. Обычно сами данные не диктуют выбор схемы организации; ее определяют операции доступа и обработки данных. Вложенные структуры. Поле структуры может само включать другую структуру или даже массив структур. Как только структура создана, с помощью операторов присваивания или функции struct можно вложить структуры в существующие поля. Применение функции struct. Чтобы сформировать вложенную структуру, необходимо организовать рекурсию при вызове функции struct. Пример. A = struct('data',[3 4 7; 8 0 1],'nest',... Запись A(1) содержит требуемые значения, благодаря вызову внешней функции struct. Следующая последовательность операторов производит результат, аналогичный предыдущему: A(1).data = [3 4 7; 8 0 1]; Введем изменения в запись A(2): A(2).data = [9 3 2; 7 6 5]; Тогда получим следующую структуру:
Рис. 6.7 Как и в случае массивов записей с одним уровнем вложения, можно с использованием операторов присваивания сформировать вложенные массивы структур. Индексация вложенных структур. Для того чтобы проиндексировать структуру, надо добавить имена вложенных полей, используя в качестве разделителя точку (.). Первая текстовая строка индексного выражения определяет имя структуры, а последующие имена полей, содержащих другие структуры. Пример.
Многомерные массивы структур. Многомерные массивы структур рассматриваются как расширение прямоугольных массивов структур. По аналогии с другими типами многомерных массивов их можно формировать, либо используя операторы присваивания, либо функцию cat. Пример. patient(1, 1, 1).name = 'John Doe';patient(1,1,1).billing = 127.00;
Рис. 6.8. Многомерный массив структур размера 1х2х2. Для применения функций к многомерным массивам структур надо использовать индексный подход, чтобы получить доступ к полям записи и элементам полей. Пример. sum((patient(1, 1, 2).test)) Суммировать все поля billing 3-мерного массива структур patient: total = sum([patient.billing]) В оглавление книги \ К следующему разделу \ К предыдущему разделу \ Предметный указатель
|
|
Всероссийская научная конференция "Проектирование научных и инженерных приложений в среде MATLAB" (май 2002 г.)
|
||
| На первую страницу \ Сотрудничество \ MathWorks \ SoftLine \ Exponenta.ru \ Exponenta Pro | ||
| E-mail: | ||
| Информация на сайте была обновлена 11.05.2004 |
Copyright 2001-2004 SoftLine Co Наши баннеры |
|