|
|
|
|
Урок №15. Массивы ячеек
Массив ячеек — наиболее сложный тип данных в системе MATLAB. Это массив, элементами которого являются ячейки, содержащие любые типы массивов, включая массивы ячеек. Отличительным атрибутом массивов ячеек является задание содержимого последних в фигурных скобках {}. Создавать массивы ячеек можно с помощью оператора присваивания. Существуют два способа присваивания данных отдельным ячейкам:
Рассмотрим первый способ. Для этого создадим файл-сценарий с именем се.m: А( !.!)={'Курить вредно!'}; А(1.2)={[1 2;3 4]}; A(2,l)={2+3i}; А(2.2)={0:0.1:1}
В этом примере задан массив ячеек с четырьмя элементами: строкой символов, матрицей, комплексным числом и одномерным массивом из 11 чисел. Теперь можно вызвать этот массив: » се А = 'Курить вредно!' [2x2 double] [2.0000+ 3.00001] [1x11 double] » A(l.l) ans = 'Курить вредно!' »А(2.1) ans = [2.0000+ 3.00001] Заметим, что к ячейкам такого массива можно обращаться с помощью индексирования, например в виде А(1,1), А(2,1) и т. д. При индексации содержимого массив ячеек задается следующим образом: А{1,1}='Курить вредно!'; А{1.2}-[1 2:3 4]; А{2,1}=2+31; А{2,2}=0:0.1:1; Теперь можно ознакомиться с созданным массивом ячеек в командном режиме: » А ans = 'Курить вредно! ' [2x2 double] [2.0000+ 3.0000i] [1x11double] » А{1,1} ans = Курить вредно! » А{2.1} ans = 2.0000 + 3.0000i При серьезной работе с массивами структур (записей) и массивами ячеек полезно иметь дополнительную информацию о списках значений. Для получения такой информации следует выполнить команду help list. Создание ячеек с помощью функции cell Для создания массива ячеек может использоваться функция eell :
Следующие примеры поясняют применение данной функции: » cell(2) ans = [] [] [] [] » C=cell(2.3) С = [] [] [] [] [] [] » C0=zeros(2.3) С0= 0 0 0 0 0 0 » celHsize(CO)) ans = [] [] [] [] [] [] Образовавшиеся пустые ячейки можно заполнить, используя операции присваивания: » С{1.1}=1;С{1.2}='Привет':С{2,1}='Неllо':С{2.2}=[1 2; 3 4]; »С С = [ 1] 'Привет' []
'Hello' [2x2 double]
[] Для отображения массива ячеек С служит функция celldlsp(C). Она дает рекурсивное отображение содержимого массива ячеек С. Например, для ранее созданного массива ячеек А получится следующее: » celldisp(A) А{1.1}= Курить вредно! А{2.1}= 2.0000 + 3.0000i А{1.2} = 1 2 3 4
А{2.2} -Columns 1 through 7 0 0.1000 0.2000 0.3000 0.4000 0.5000 0.6000 Columns 8 through 11 0.7000 0.8000 0.9000 1.0000 Для более наглядного графического представления массива ячеек может использоваться команда cell plot: Создание строкового массива ячеек из массива символов Для создания из массива символов S строкового массива ячеек может использоваться функция eellstr(S). Каждый ряд массива символов превращается в отдельную ячейку. Следующий пример поясняет применение функции cellstr: » S={'Привет.'; 'дорогой'; 'друг'}; » C=cellstr(S) С = 'Привет.' 'дорогой' 'ДРУГ' Это еще один способ формирования массивов ячеек. Функция iscellstr(C) равна 1, если ее аргумент С — строковый массив ячеек, и 0, если это неверно. Присваивание с помощью функции deal С помощью функции deal возможно множественное присваивание входных данных выходным:
Возможен ряд полезных применений функции deal:
Следующий пример иллюстрирует применение функции deal: » [X,Y.Z]=deal(1.2+31,'Привет!') X = 1
Y = 2.0000.+ 3.0000i Z =
Привет! » [X Y Z]=dealС Привет!') X = Привет!
Y = Привет! Z = Привет! Тестирование имен массивов ячеек Ввиду обилия типов данных в системе MATLAB часто возникает необходимость в их тестировании [Помимо функций iscell и iscellstr вы всегда можете использовать для тестирования массивов ячеек функцию 15а(имя объекта, 'cell') и команду whos имя объекта. — Примеч. ред.]. Для тестирования массивов ячеек может использоваться функция is сеll (С), которая возвращает логическое значение 1, если С — массив ячеек, и 0 в противном случае. Это поясняют следующие примеры: » t=iscell(A) t = 1 » B=[l 23]; » iscell(B) ans= 0 Функции преобразования типов данных При обработке сложных данных возникает необходимость в преобразовании их типов. Ниже представлены такие функции, имеющие отношение к массивам ячеек:
Примеры применения данных функций: » А=[1 2; 3 4: 5 6] А= 1 2 3 4 5 6 »С= num2cell(A.2) С= [1x2 double] [1x2 double] [1x2 double] »С{1.1} ans = 1 2 »С{2.1} ans = 3 4 »С{3,1} ans = 5 б » cat(2.C{:}) ans = 1 2 3 4 5 6 ans = 1 2 3 4 5 6 » num2cell(A.[l 2]) ans = [3x2 double]
Пример преобразования: » С={' Привет! '.123. 2+31} С = 'Привет!' [123] [2.0000+3.00001] » f={ 'name' . 'number' , 'complex'}; » S=cell2struct(C,f.2) S = name: 'Привет! ' number: 1 2 3 complex: 2.0000+ 3.0000i
» C=struct2cellS) С = 'Привет!' [ 123] [2.0000+3.00001] С помощью функции cat можно формировать многомерные массивы ячеек. Например, трехмерный массив С формируется следующим образом (m-файл с именем се2.m): А{1.1}='Курить вредно!'; А{1,2}=[1 2:3 4]; А{2.1}=2+31; А{2.2}=0:0.1:1; В{1,1}='Пить тоже вредно!'; В{1,2}=[1 2 3 4]; В{2.1}=2; B{2.2}=2*pi; C=cat(3.A.B); Теперь можно просмотреть данный массив, имеющий две страницы: » се2 » С С(:,:,1) =
'Курить вредно!' [2x2
double]
[2.0000+ 3.00001] [1x11 double]
С(:.:.2) = 'Пить тоже вредно!' [1x4 double] [ 2] [ 6.2832] Доступ к ячейкам многомерных массивов очевиден и поясняется следующими примерами: » C(l.l.l) ans = 'Курить вредно!' » C(1.1.2) ans = 'Пить тоже вредно!' Содержимым ячейки массива ячеек может быть, в свою очередь, произвольный массив ячеек. Таким образом, возможно создание вложенных массивов ячеек — пожалуй, самого сложного типа данных. В следующем примере показано формирование массива ячеек А с вложенным в него массивом В (он был создан в примере выше): » clear A; » A(l.l)={{magic(3).{'Hello!'}}}; »А(1.2)={В}; » А ans = {1x2 cell} {2x2 cell} ans = [3x3 double] {1x1 cell} >> A{2} ans =
'Пить тоже вредно!' [1x4
double] [ 2 ] [ 6.2832]
» cellplot(A) В данном случае вложенный массив отображается полностью как часть массива А. В этом уроке мы научились:
|