Содержание раздела

         

Функции преобразования типов данных



Функции преобразования типов данных

При обработке сложных данных возникает необходимость в преобразовании их типов. Ниже представлены такие функции, имеющие отношение к массивам ячеек:

num2cell (A,DIM) — преобразует массив чисел А в массив ячеек, помещая в одну и ту же ячейку элементы, соответствующие одному значению индекса вдоль измерения, указанного параметром DIM. Например, num2cell (A.2) преобразует каждый ряд массива А в отдельную ячейку. cat(DIM.C{:}) осуществляет обратное преобразование.

num2cell (A) — преобразует массив чисел А в массив ячеек и возвращает последний. Каждый элемент А превращается в отдельную ячейку. Возвращаемый массив имеет тот же размер и ту же размерность, что и исходный массив А.

Примеры применения данных функций:

» А=[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]

cell2struct(C. FIELDS. DIM) — преобразует массив ячеек С в массив структур, превращая размерность DIM массива ячеек С в поля структуры S. Размерность 1 — столбцы. Размерность 2 — строки. FILEDS — массив символов или строковый массив ячеек.

Пример преобразования:

» С={' Привет! '.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

struct2cell (S) — преобразует массив структур S размером тхп, в котором содержатся р полей, в массив ячеек, так что возвращаемый массив будет иметь размер рхтхп. Если массив структур многомерный, то возвращаемый массив ячеек будет иметь размер, равный [р size(S)]. Схему структуры с названиями полей возвращаемый массив ячеек не содержит. Пример такого преобразования приводится ниже:

» C=struct2cellS)

С =

'Привет!'

[           123]

[2.0000+3.0000i]

Многомерные массивы ячеек



Многомерные массивы ячеек

С помощью функции cat можно формировать многомерные массивы ячеек. Например, трехмерный массив С формируется следующим образом (m-файл с именем се2.m):

А{1.1}='Курить вредно!'; 

А{1,2}=[1 2:3 4];

 А{2.1}=2+3i;

А{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.0000i] [1x11 double]

С(:.:.2) =

'Пить тоже вредно!' [1x4 double] 

[ 2]                [    6.2832]

Доступ к ячейкам многомерных массивов очевиден и поясняется следующими примерами:

» C(l.l.l) 

ans =

'Курить вредно!' 

» C(1.1.2)

ans =

'Пить тоже вредно!'

в командном режиме малая русская



Примечание

Уже отмечалось, что в командном режиме малая русская буква «с» в строках ведет к пе-реводу строки ввода. Однако в m-файлах, создаваемых в редакторе/отладчике М-фай-лов, эта недоработка обычно не проявляется. Хотя гарантии в этом, увы, пока нет.
В этом примере задан массив ячеек с четырьмя элементами: строкой символов, матрицей, комплексным числом и одномерным массивом из 11 чисел. Теперь можно вызвать этот массив:
» се
А =
'Курить вредно!' [2x2 double] 
[2.0000+ 3.00001] [1x11 double]
» A(1,1) 
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.

Присваивание с помощью функции deal



Присваивание с помощью функции deal

С помощью функции deal возможно множественное присваивание входных данных выходным:

[A.B,C,...]=deal(X,Y,Z,...) — обеспечивает последовательное присваивание входных данных выходным, то есть А=Х, B=Y, C=Z и т. д.;

[A,B,C....]=deal(X) — присваивает единственный вход всем выходам, т. е. А=Х, В=Х, С=Х и т. д.

Возможен ряд полезных применений функции deal:

[S.FIELD]=deal (X) — присваивает всем полям FIELD структуры S значения X. Если S не существует, то нужно использовать конструкцию [S(1:M)*.FIELD]= deal(X);

[X{:}]=dea1 (A. FIELD) — копирует поля FIELD структуры А в массив ячеек X. Если X не существует, следует использовать конструкцию [X{1:M}]=deal (A.FIELD);

[A,B,C,...]=deal (X{:}) — копирует содержимое массива ячеек X в отдельные переменные А, В, С,...;

[A,B,C,...]=deal(S.FIELD) — копирует содержимое поля FIELD массива структур S в отдельные переменные А, В, С,...;

Следующий пример иллюстрирует применение функции deal:

» [X,Y.Z]=deal(1,2+3i,'Привет!') 

X =

Y =

2.0000.+ 3.0000i 

Z =

Привет!

» [X Y Z]=dealС Привет!') 

X =

Привет!

 Y =

Привет! 

Z = 

Привет!

Создание массивов ячеек



Создание массивов ячеек

Массив ячеек — наиболее сложный тип данных в системе MATLAB. Это массив, элементами которого являются ячейки, содержащие любые типы массивов, включая массивы ячеек. Отличительным атрибутом массивов ячеек является задание содержимого последних в фигурных скобках {}. Создавать массивы ячеек можно с помощью оператора присваивания.

Существуют два способа присваивания данных отдельным ячейкам:

индексацией ячеек;

индексацией содержимого.

Рассмотрим первый способ. Для этого создадим файл-сценарий с именем се.m:

А( 1.1)={'Курить вредно!'};

А(1.2)={[1 2;3 4]}; 

A(2,1)={2+3i}; 

А(2.2)={0:0.1:1}



Создание строкового массива ячеек из массива символов



Создание строкового массива ячеек из массива символов

Для создания из массива символов S строкового массива ячеек может использоваться функция eellstr(S). Каждый ряд массива символов превращается в отдельную ячейку. Следующий пример поясняет применение функции cellstr:

» S={'Привет.'; 'дорогой'; 'друг'}; 

» C=cellstr(S) 

С =

'Привет.'

'дорогой'

'ДРУГ'

Это еще один способ формирования массивов ячеек.

Функция iscellstr(C) равна 1, если ее аргумент С — строковый массив ячеек, и 0, если это неверно.

Создание ячеек с помощью функции cell



Создание ячеек с помощью функции cell

Для создания массива ячеек может использоваться функция eell :

cell(N) — создает массив ячеек из NxN пустых матриц;

cell(M.N) или cell([M,N]) — создает массив ячеек из MxN пустых матриц;

cell(M.N.P,...) или сеll([М N Р ...]) — создает массив из MxNxPx... пустых матриц;

cell (size(A)) — создает массив ячеек из пустых матриц того же размера, что имассив А; 

cell (объект Java) — автоматически преобразует объекты или массивы Java (javaarray) в массив ячеек, элементы которого являются объектами MATLAB.

Следующие примеры поясняют применение данной функции:

» 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]     []

Тестирование имен массивов ячеек



Тестирование имен массивов ячеек

Ввиду обилия типов данных в системе MATLAB часто возникает необходимость в их тестировании [ Помимо функций iscell и iscellstr вы всегда можете использовать для тестирования массивов ячеек функцию 15а(имя объекта, 'cell') и команду whos имя объекта. — Примеч. ред. ]. Для тестирования массивов ячеек может использоваться функция is сеll (С), которая возвращает логическое значение 1, если С — массив ячеек, и 0 в противном случае. Это поясняют следующие примеры:

» t=iscell(A) 

t =

1

» B=[l 23]; 

» iscell(B)

 ans=

0

Массивы ячеек


Урок 15. Массивы ячеек Создание массивов ячеек Создание ячеек с помощью функции cell Визуализация массивов ячеек Создание строкового массива ячеек из массива символов Присваивание с помощью функции deal Тестирование имен массивов ячеек Функции преобразования типов данных Многомерные массивы ячеек Вложенные массивы ячеек Что новoго мы узнали?

Визуализация массивов ячеек



Визуализация массивов ячеек

Для отображения массива ячеек С служит функция 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:

Вложенные массивы ячеек



Вложенные массивы ячеек

Содержимым ячейки массива ячеек может быть, в свою очередь, произвольный массив ячеек. Таким образом, возможно создание вложенных массивов ячеек — пожалуй, самого сложного типа данных.

В следующем примере показано формирование массива ячеек А с вложенным в него массивом В (он был создан в примере выше):

» 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)

В данном случае вложенный массив отображается полностью как часть массива А.