Как настроить смартфоны и ПК. Информационный портал
  • Главная
  • Вконтакте
  • MATLAB Language Ячеистые массивы. Одномерные массивы MATLAB Операции с массивами матлаб

MATLAB Language Ячеистые массивы. Одномерные массивы MATLAB Операции с массивами матлаб

Язык технических вычислений

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

MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.

Начало работы

Изучите основы MATLAB

Основы языка

Синтаксис, индексация и обработка массива, типы данных, операторы

Импорт и анализ данных

Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования

Математика

Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика

Графика

2D и 3D графики, изображения, анимация

Программирование

Скрипты, функции и классы

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

Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE

Инструменты разработки программного обеспечения

Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов

Урок №13.

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

    Понятие о многомерных массивах

    Применение оператора «:» в многомерных массивах

    Доступ к отдельному элементу многомерного массива

    Удаление размерности в многомерном массиве

    Создание страниц, заполненных константами и случайными числами

    Объединение массивов

    Вычисление числа размерностей массива и определение размера размерностей

    Перестановки размерностей массивов

    Сдвиг размерностей массивов

    Удаление единичных размерностей

В этом уроке мы коснемся вопросов, связанных с более сложными типами данных, к которым относятся многомерные массивы.

Понятие о многомерных массивах

В MATLAB двумерный массив является частным случаем многомерного массива. Многомерные массивы характеризуются размерностью более двух. Таким массивам можно дать наглядную интерпретацию. Так, матрицу (двумерный массив) можно записать на одном листе бумаги в виде строк и столбцов, состоящих из элементов матрицы. Тогда блокнот с такими листками можно считать трехмерным массивом, полку в шкафу с блокнотами - четырехмерным массивом, шкаф со множеством полок - пятимерным массивом и т. д. В этой книге практически нигде, кроме этого раздела, мы не будем иметь дело с массивами, размерность которых выше двух, но знать о возможностях MATLAB в части задания и применения многомерных массивов все же полезно.

В нашей литературе понятия «размер» и «размерность» массивов являются почти синонимами. Однако они имеют явно разный смысл в данной книге, как и в документации и литературе по системе MATLAB. Под размерностью массивов понимается число измерений в пространственном представлении массивов, а под размером - число строк и столбцов (mxn) в каждой размерности массива.

Применение оператора «:» в многомерных массивах

При обычном задании массивов (с помощью символа точки с запятой «;») число рядов (строк) массива получается на 1 больше, чем число символов «:», но массив остается двумерным. Оператор «:» (двоеточие) позволяет легко выполнять операции по увеличению размерности массивов. Приведем пример формирования трехмерного массива путем добавления новой страницы. Пусть у нас задан исходный двумерный массив М размером 3x3:

» М=

М =

1 2 3

4 5 6

7 8 9

Для добавления новой страницы с тем же размером можно расширить М следующим образом:

» М(:.:.2)=

M(:.:.l) =

1 2 3

4 5 6

7 8 9

М(:.:.2) =

10 11 12

13 14 15

16 17 18

Посмотрим, что теперь содержит массив М при явном его указании:

» М

М(:,:.1)=

1 2 3

4 5 6

7 8 9

М(:.:.2) =

10 11 12

13 14 15

16 17 18

Как можно заметить, числа в выражениях М(:.:, 1) и М(:,: ,2) означают номер страницы.

Доступ к отдельному элементу многомерного массива

Чтобы вызвать центральный элемент сначала первой, а затем второй страницы, надо записать следующие выражения:

» М(2.2,1)

Ans =

» МС2.2.2)

Ans =

Таким образом, в многомерных массивах используется то же правило индексации, что и в одномерных и двумерных. Произвольный элемент, например, трехмерного массива задается как М(1 .j.k), где 1 - номер строки, j - номер столбца и k - номер страницы. Этот элемент можно вывести, а можно присвоить ему заданное значение х: М(1 ,j,k)=x.

Удаление размерности в многомерном массиве

Мы уже отмечали возможность удаления отдельных столбцов присвоением им значений пустого вектора-столбца . Этот прием нетрудно распространить на страницы и вообще размерности многомерного массива. Например, первую страницу полученного массива М можно удалить следующим образом:

» М(:.:.1)=

М =

10 11 12

13 14 15

16 17 18

Нетрудно заметить, что в этом массиве осталась только вторая страница и что размерность массива уменьшилась на 1 - он стал двумерным.

Создание страниц, заполненных константами и случайными числами

Если после знака присваивания стоит численная константа, то соответствующая часть массива будет содержать элементы, содержащие данную константу. Например, создадим из массива М (см. пример выше) массив, у которого вторая страница содержит единицы:

»M(:.:..2)=1

М(:.:,1) =

10 11 12

13 14 15

16 17 18

М(:.:.2) =

1 1 1

1 1 1

1 1 1

А теперь заменим первую страницу массива на страницу с нулевыми элементами:

»M(:.:.1)=0

M(:.:.1)=

0 0 0

0 0 0

0 0 0

М(:.:,2) =

1 1 1

1 1 1

1 1 1

Использование функций ones, zeros, rand и randn

Функции ones (создание массивов с единичными элементами), zeros (создание массивов с нулевыми элементами) и rand или randn (создание массивов с элементами - случайными числами с соответственно равномерным и нормальным распределением) могут также использоваться для создания многомерных массивов. Примеры приводятся ниже:

» E=ones(3.3.2)

E(:.:.1)=

1 1 1

1 1 1

1 1 1

E(:.:,2) =

1 1 1

1 1 1

1 1 1

» Z=zeros(2,2,3) Z(:,:.l) =

Z(:.:.2) =

Z(:.:,3) =

» R=randn(3,2.2) R(:.:.l) =

1.6656-1.1465

0.1253 1.1909

0.2877 1.1892

R(:.:,2) =

0.0376-0.1867

0.3273 0.7258

0.1746 -0.5883

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

» A=randn(3,3,3,0)

А =

Empty array: 3-bу-3-bу-3-by-0

Как видно из данного примера, пустой массив возвращается с соответствующим комментарием.

Объединение массивов

Для создания многомерных массивов служит описанная ранее для матриц специальная функция конкатенации cat:

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

    cat(2.A.B) - возвращает массив [А.В], в котором объединены ряды (горизонтальная конкатенация);

    cat(1, А.В) - возвращает массив [А:В], в котором объединены столбцы (вертикальная конкатенация);

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

Функции cat(DIM,C{:}) и cat(DIM.C.FIELD) обеспечивают соответственно конкатенацию (объединение) ячеек массива ячеек (см урок 15) или структур массива структур (см. урок 14), содержащих числовые матрицы, в единую матрицу. Ниже приводятся примеры применения функции cat:

» М1=

» М2=

М2 =

» catd.Ml.M2)

Ans =

5 б

» cat(2.Ml.M2)

ans=

1 2 5 6

3 4 7 8

» M-cat(3.Ml.M2) M(:,:.l) =

М(:,:,2) =

Работа с размерностями

Вычисление числа размерностей массива

Функция ndims(A) возвращает размерность массива А (если она больше или равна двум). Но если входной аргумент - массив Java или массив массивов Java, то независимо от размерности массива эта функция вернет 2. Следующий пример иллюстрирует применение функции ndims:

» M=rand(2:3:4:5):

» ndims(M)

Ans =

4
Вычисление размера размерности массива

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

    М = size(A.DIM) возвращает размер размерности, указанной скаляром DIM, в виде вектора-строки размером 2. Для двумерного или одномерного массива А size(A.l) возвращает число рядов, a size (А, 2) - число столбцов;

Для N-мерных массивов А при n>2 size(A) возвращает N-мерный вектор-строку, отражающий страничную организацию массива, последняя составляющая этого вектора равна N. В векторе отсутствуют данные о единичных размерностях (тех, где расположены вектор-строка или вектор-столбец, т. е. size(A,DIM)==l). Исключение представляют N-мерные массивы Java массивов javaarray, которые возвращают размер массива самого высокого уровня.

Вообще, когда входным аргументом size является javaarray, то возвращаемое число столбцов всегда 1, а число рядов (строк) равно размеру (длине) javarray.

    Si ze(A) возвращает размер первых N размерностей массива А;

    D = size (А), для mxn матрицы А возвращает двухэлементный вектор-строку, в котором первая составляющая - число строк т, а вторая составляющая - число столбцов n;

    Size(A) возвращает число рядов и столбцов в разных выходных параметрах (выходных аргументах в терминологии MATLAB) тип.

Перестановки размерностей массивов

Если представить многомерный массив в виде страниц, то их перестановка является перестановкой размерностей массива. Для двумерного массива перестановка часто означает транспонирование - замену строк столбцами и наоборот. Следующие функции обобщают транспонирование матриц для случая многомерных массивов и обеспечивают перестановку размерностей многомерных массивов:

    Permute (A, ORDER) - переставляет размерности массива А в порядке, определяемом вектором перестановок ORDER. Вектор ORDER - одна из возможных перестановок всех целых чисел от 1 до N, где N - размерность массива А;

    ipermuteCA, ORDER) - операция, обратная permute: permute(permute(A. ORDER), ORDER)=A

Ниже приводятся примеры применения этих функций и функции size:

» А=:

» В=;

» С=;

» D=cat(3.A,B.C)

D(:,:,l) =

9 10

11 12

» size(D)

Ans =

2 2 3

» size(permute(D.))

ans=

3 2 2

»size(ipermute(D.))

Ans=

2 2 3

» ipermute(permute(D,),)

Ans(:. :,2) =

ans(:.:,3) =

9 10

11 12

Сдвиг размерностей массивов

Сдвиг размерностей реализуется функцией shiftdim:

    B=shiftdim(X,N) - сдвиг размерностей в массиве X на величину N. Если М>0, то сдвиг размерностей, расположенных справа, выполняется влево, а N первых слева размерностей сворачиваются в конец массива, т. е. движение размерностей идет по кругу против часовой стрелки. Если М<0, сдвиг выполняется вправо, причем N первых размерностей, сдвинутых вправо, замещаются единичными размерностями;

    Shiftdim(X) - возвращает массив В с тем же числом элементов, что и у массива X, но с удаленными начальными единичными размерностями. Выходной параметр NSHIFTS показывает число удаленных размерностей. Если X - скаляр, функция не изменяет X , В, NSHIFTS.

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

» A=randn(1.2.3,4):

» =shiftdim(A)

B(:.:.l) =

2.1707-1.01060.5077

0.05920.6145 1.6924

B(:.:,2) =

0.5913 0.3803 -0.0195

0.6436-1.0091-0.0482

B(:.:.3) =

0.0000 1.0950 0.4282

0.3179-1.87400.8956

В(:.:,4) =

0.7310 0.0403 0.5689

0.5779 0.6771 -0.2556

Удаление единичных размерностей

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

А - одномерный или двумерный массив (матрица или вектор), то функция вернет тот же самый массив А. Следующий пример поясняет работу squeeze:

» A=randn(1.2.1.3.1):

» B=squeeze(A)

0.6145 1.6924 -0.6436

0.5077 0.5913 0.3803

Обратите внимание на то, что пятимерный массив А превращается в массив с размерностью 2 и размером 2x3.

Что нового мы узнали?

В этом уроке мы научились:

    Создавать многомерные массивы.

    Применять оператор «:» в многомерных массивах.

    Получать доступ к отдельным элементам многомерных массивов.

    Удалять размерности у многомерного массива.

    Создавать массивы, заполненные константами и случайными числами.

    Осуществлять объединение массивов.

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

    Переставлять, сдвигать и удалять единичные размерности в многомерных массивах.

Язык технических вычислений

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

MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.

Начало работы

Изучите основы MATLAB

Основы языка

Синтаксис, индексация и обработка массива, типы данных, операторы

Импорт и анализ данных

Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования

Математика

Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика

Графика

2D и 3D графики, изображения, анимация

Программирование

Скрипты, функции и классы

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

Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE

Инструменты разработки программного обеспечения

Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов

Элементы одного и того же класса часто могут быть объединены в массивы (с несколькими редкими исключениями, например, с помощью функций). Числовые скаляры, по умолчанию класса double , могут храниться в матрице.

>> A = A = 1.0e+04 * 0.0001 -0.0002 0.0003 0.0001 1.5625 0.0003 Inf Inf NaN -Inf

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

>> s = ["MATLAB ","is ","fun"] s = MATLAB is fun

Обратите внимание, что, несмотря на то, что оба они используют скобки [ и ] , классы результатов отличаются. Поэтому операции, которые могут быть сделаны на них, также различны.

>> whos Name Size Bytes Class Attributes A 2x5 80 double s 1x13 26 char

На самом деле массив s не является массивом строк "MATLAB " , "is " и "fun" , это всего лишь одна строка - массив из 13 символов. Вы получите те же результаты, если бы они были определены одним из следующих:

>> s = ["MAT","LAB ","is f","u","n"]; >> s = ["M","A","T","L","A","B," ","i","s"," ","f","u","n"];

Обычный вектор MATLAB не позволяет хранить сочетание переменных разных классов или несколько разных строк. Здесь массив cell пригодится. Это массив ячеек, каждый из которых может содержать некоторый объект MATLAB, класс которого может быть различным в каждой ячейке, если это необходимо. Используйте фигурные скобки { и } вокруг элементов для хранения в массиве ячеек.

>> C = {A; s} C = "MATLAB is fun" >> whos C Name Size Bytes Class Attributes C 2x1 330 cell

Стандартные объекты MATLAB любых классов могут храниться вместе в массиве ячеек. Обратите внимание, что массивы ячеек требуют больше памяти для хранения их содержимого.

Доступ к содержимому ячейки осуществляется с помощью фигурных скобок { и } .

>> C{1} ans = 1.0e+04 * 0.0001 -0.0002 0.0003 0.0001 1.5625 0.0003 Inf Inf NaN -Inf

Заметим, что C(1) отличается от C{1} . Принимая во внимание, что последний возвращает содержимое ячейки (и имеет пример с double примером), первый возвращает массив ячеек, который является подматрицей C Точно так же, если D было массивом из 10 на 5 ячеек, тогда D(4:8,1:3) вернет подматрицу D , размер которой равен 5 на 3, а класс - cell . И синтаксис C{1:2} не имеет одного возвращенного объекта, но rater он возвращает 2 разных объекта (аналогично функции MATLAB с несколькими возвращаемыми значениями):

>> = C{1:2} x = 1 -2 3.14 0.8 15625 3.14159265358979 Inf Inf NaN -Inf y = MATLAB is fun

Язык технических вычислений

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

MATLAB помогает вам воплощать свои идеи за пределами рабочего стола. Можно запустить исследования больших наборов данных и масштабировать до кластеров и облаков. Код MATLAB может быть интегрирован с другими языками, позволив вам развернуть алгоритмы и приложения в сети, предприятии и промышленных системах.

Начало работы

Изучите основы MATLAB

Основы языка

Синтаксис, индексация и обработка массива, типы данных, операторы

Импорт и анализ данных

Импорт и экспорт данных, в том числе и больших файлов; предварительная обработка данных, визуализация и исследования

Математика

Линейная алгебра, дифференцирование и интегрирование, преобразования Фурье и прочая математика

Графика

2D и 3D графики, изображения, анимация

Программирование

Скрипты, функции и классы

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

Разработка приложений с помощью App Designer, программируемого рабочего процесса или GUIDE

Инструменты разработки программного обеспечения

Отладка и тестирование, организация крупных проектов, интеграция с системой контроля версий, упаковка тулбоксов

Лучшие статьи по теме