Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

matlab_7

.pdf
Скачиваний:
12
Добавлен:
27.05.2015
Размер:
248.19 Кб
Скачать

Работа с многомерными массивами, структурами и массивами ячеек

Хотя необходимость в использовании массивов с числом размерностей большей 2 возникает относительно редко, их создание и обработка могут быть сопряжены с довольно громоздкими конструкциями в коде. Для подобных ситуаций MatLab предлагает ряд средств, упрощающих реализацию алгоритмов с многомерными массивами (далее ММ).

Примечание: в документации по MatLab под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером – число элементов в каждой размерности массива.

Операция «:» позволяет обращаться к отдельным измерениям ММ, индексируя их как обычные элементы массивов:

>>m = fix(rand(2,2,2)*10);

>>a = m(:,:,1)

a =

98

41

>>b = m(1,:,:)

b(:,:,1) =

9

8

b(:,:,2) =

4

7

>> c = m(1,2,:)

 

c(:,:,1) =

8

 

c(:,:,2) =

7

 

m(:,:,1) =

9 8

41

m(:,:,2) =

4 7

99

В результате этих операций получаются массивы, содержащие элементы, которые «вложены» в соответствующие размерности (или их пересечения) ММ.

Оператор «:» также позволяет легко выполнять операции по увеличению размерности массивов путем добавления новых «слоёв». Например:

>>M = [1 2 3; 4 5 6; 7 8 9];

...

>>M(:,:,2)=[10 11 12; 13 14 15; 16 17 18]

M(:,:,1) =

 

 

 

 

 

 

1

2

3

M =

1

2

3

4

5

6

4

5

6

 

7

8

9

7

8

9

 

 

 

 

 

 

 

 

M(:,:,2) =

 

 

 

 

 

 

10

11

12

 

 

 

 

13

14

15

 

 

 

 

16

17

18

 

 

 

 

Удаление отдельных столбцов, «слоёв» или измерений ММ производится с помощью присвоения им как значения

пустого вектора-столбца []. Например:

>> M(:,:,1)=[ ] M =

10

11

12

13

14

15

16

17

18

>> size(M)

 

ans =

3

 

3

 

При этом в этом массиве М остался только второй «слой», а его размерность уменьшилась на 1 – он снова стал двумерным.

Удаление единичных размерностей производится функцией squeeze(A). Единичной называется размерность, в которой size(A, dim) == 1. Если A – одномерный или двумерный массив, то функция вернет тот же самый массив A. Например

>>A=randn(1, 2, 1, 3, 1);

>>B=squeeze(A)

B =

0.6145 1.6924 -0.6436

0.5077 0.5913 0.3803

Для создания ММ из уже имеющихся служит функция конкатенации cat():

C = cat(DIM, A, B) возвращает результат объединения двух массивов A и B вдоль размерности DIM;

B=cat(DIM, A1, A2,…) объединяет множество входных массивов A1, A2,... вдоль размерности DIM.

Примечание: функция cat() обеспечивает также и объединение массивов ячеек или массивов записей(структур).

Примеры:

>>M1=[1 2; 3 4]; M2=[5 6; 7 8];

>>cat(1, M1, M2)

ans =

>> cat(2, M1, M2)

1 2

3 4

ans =

6

5 6

1 2

5

7 8

3 4

7

8

 

>> M=cat(3, M1, M2)

 

M(:,:,1) =

 

1 2

 

 

 

3 4

 

 

 

M(:,:,2) =

 

5 6

 

 

 

7 8

 

 

Для перегруппировки элементов ММ или преобразования их размеров используется функция reshape() в ряде форм записи:

B = reshape(A, m, n, p, ...)

B = reshape(A, [m n p ...])

Эта функция возвращает многомерный массив (размера m×n×p×…), сформированный из элементов массива A. Основное требование состоит в том, чтобы в А и В было одно и то же число элементов m×n×p×… .