MATLAB: Мастерство работы с многомерными и специальными массивами
В MATLAB все переменные любого типа данных представляют собой многомерные массивы. Вектор — это одномерный массив, а матрица — двумерный.
Векторы и матрицы мы уже рассматривали. В этой главе речь пойдет о многомерных массивах, но сначала обсудим некоторые специальные типы массивов.
Специальные массивы в MATLAB
В этом разделе рассмотрим функции для создания специальных массивов. Для всех этих функций один аргумент создает квадратный массив, два аргумента — прямоугольный.
Функция zeros()
Создает массив, заполненный нулями.
Пример:
zeros(5)
Результат:
ans =
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
0 0 0 0 0
Функция ones()
Создает массив, заполненный единицами.
Пример:
ones(4,3)
Результат:
ans =
1 1 1
1 1 1
1 1 1
1 1 1
Функция eye()
Создает единичную матрицу.
Пример:
eye(4)
Результат:
ans =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
Функция rand()
Создает массив равномерно распределенных случайных чисел в интервале (0,1).
Пример:
rand(3, 5)
Результат (примерный):
ans =
0.8147 0.9134 0.2785 0.9649 0.9572
0.9058 0.6324 0.5469 0.1576 0.4854
0.1270 0.0975 0.9575 0.9706 0.8003
Магический квадрат
Магический квадрат — это квадратная матрица, суммы элементов в каждой строке, столбце и на обеих диагоналях которой равны.
Функция magic() создает магический квадрат. Она принимает один аргумент — размер квадрата (скаляр ≥ 3).
Пример:
magic(4)
Результат:
ans =
16 2 3 13
5 11 10 8
9 7 6 12
4 14 15 1
Многомерные массивы
Массив, имеющий более двух измерений, называется многомерным. В MATLAB это расширение обычной двумерной матрицы.
Обычно многомерный массив создают, сначала формируя двумерный массив, а затем расширяя его.
Пример создания 3D-массива
Создадим двумерный массив a:
a = [7 9 5; 6 1 9; 4 3 2]
Результат:
a =
7 9 5
6 1 9
4 3 2
Добавим третье измерение:
a(:, :, 2) = [1 2 3; 4 5 6; 7 8 9]
Результат:
a(:,:,1) =
7 9 5
6 1 9
4 3 2
a(:,:,2) =
1 2 3
4 5 6
7 8 9
Многомерные массивы можно создавать и с помощью ones(), zeros() или rand():
b = rand(4,3,2)
Функция cat() объединяет массивы по заданному измерению:
B = cat(dim, A1, A2...)
B— новый массивA1, A2, ...— объединяемые массивыdim— измерение для объединения
Пример использования cat()
a = [9 8 7; 6 5 4; 3 2 1]; b = [1 2 3; 4 5 6; 7 8 9]; c = cat(3, a, b, [2 3 1; 4 7 8; 3 9 0])
Результат:
c(:,:,1) =
9 8 7
6 5 4
3 2 1
c(:,:,2) =
1 2 3
4 5 6
7 8 9
c(:,:,3) =
2 3 1
4 7 8
3 9 0
Функции для работы с массивами
MATLAB предоставляет функции для сортировки, вращения, перестановки, изменения формы и сдвига элементов массивов.
| Функция | Назначение |
|---|---|
| length | Длина вектора или наибольшее измерение массива |
| ndims | Число измерений массива |
| numel | Число элементов массива |
| size | Размеры массива |
| iscolumn | Проверка, является ли входной аргумент столбцовым вектором |
| isempty | Проверка, пуст ли массив |
| ismatrix | Проверка, является ли входной аргумент матрицей |
| isrow | Проверка, является ли входной аргумент строковым вектором |
| isscalar | Проверка, является ли входной аргумент скаляром |
| isvector | Проверка, является ли входной аргумент вектором |
| blkdiag | Строит блочно-диагональную матрицу |
| circshift | Циклически сдвигает массив |
| ctranspose | Комплексно-сопряженное транспонирование |
| diag | Диагональные матрицы и диагонали матрицы |
| flipdim | Переворачивает массив вдоль заданного измерения |
| fliplr | Переворачивает матрицу слева направо |
| flipud | Переворачивает матрицу вверх дном |
| ipermute | Обратная перестановка измерений N-D массива |
| permute | Переупорядочивает измерения N-D массива |
| repmat | Повторяет и выкладывает массив |
| reshape | Изменяет форму массива |
| rot90 | Поворачивает матрицу на 90 градусов |
| shiftdim | Сдвигает измерения |
| issorted | Проверка, отсортированы ли элементы |
| sort | Сортирует элементы по возрастанию или убыванию |
| sortrows | Сортирует строки по возрастанию |
| squeeze | Удаляет вырожденные измерения |
| transpose | Транспонирование |
| vectorize | Векторизует выражение |
Примеры
Длина, размерность и число элементов
x = [7.1, 3.4, 7.2, 28/4, 3.6, 17, 9.4, 8.9]; length(x) % длина вектора x y = rand(3, 4, 5, 2); ndims(y) % число измерений массива y s = ['Zara', 'Nuha', 'Shamim', 'Riz', 'Shadab']; numel(s) % число элементов в s
Результат:
ans = 8 ans = 4 ans = 23
Циклический сдвиг элементов массива
a = [1 2 3; 4 5 6; 7 8 9]; b = circshift(a,1); % сдвиг первого измерения вниз на 1 c = circshift(a,[1 -1]); % сдвиг первого вниз на 1, второго влево на 1
Результат:
a =
1 2 3
4 5 6
7 8 9
b =
7 8 9
1 2 3
4 5 6
c =
8 9 7
2 3 1
5 6 4
Сортировка массивов
v = [23 45 12 9 5 0 19 17]; sort(v) % сортировка вектора m = [2 6 4; 5 3 9; 2 0 1]; sort(m, 1) % сортировка по строкам (вдоль столбцов) sort(m, 2) % сортировка по столбцам (вдоль строк)
Результат:
v =
23 45 12 9 5 0 19 17
ans =
0 5 9 12 17 19 23 45
m =
2 6 4
5 3 9
2 0 1
ans =
2 0 1
2 3 4
5 6 9
ans =
2 4 6
3 5 9
0 1 2
Клеточные массивы (Cell Arrays)
Клеточные массивы — это массивы индексированных ячеек, где каждая ячейка может хранить массив любой размерности и типа данных.
Функция cell создает клеточный массив:
C = cell(dim) C = cell(dim1,...,dimN) D = cell(obj)
C— клеточный массивdim— скаляр или вектор целых чисел, задающий размерыdim1,...,dimN— скаляры, задающие размерыobj— Java-массив/объект или .NET-массив типа System.String/ System.Object
Пример
c = cell(2, 5);
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5}
Результат:
c =
2×5 cell array
{'Red' } {'Blue' } {'Green' } {'Yellow'} {'White' }
{[ 1]} {[ 2]} {[ 3]} {[ 4]} {[ 5]}
Доступ к данным в клеточных массивах
Два способа обращения к элементам:
- Круглые скобки
()— обращение к набору ячеек - Фигурные скобки
{}— обращение к данным внутри ячейки
Примеры
Обращение к набору ячеек:
c = {'Red', 'Blue', 'Green', 'Yellow', 'White'; 1 2 3 4 5};
c(1:2,1:2)
Результат:
ans =
2×2 cell array
{'Red' } {'Blue'}
{[ 1]} {[ 2]}
Обращение к содержимому ячеек:
c{1, 2:4}
Результат:
ans = 'Blue' ans = 'Green' ans = 'Yellow'
MATLAB
- Массивы в C#: объявление, инициализация и операции
- Зубчатые массивы в C#: объявление, инициализация и доступ
- Техники копирования массивов в Java: подробное руководство
- Массивы в C++: объявление, инициализация и работа с указателями
- Динамическое выделение массивов в C++: практическое руководство с примерами кода
- MATLAB: Комплексный обзор ведущей среды численных вычислений
- Переменные в MATLAB: Основы, примеры и работа с векторами/матрицами
- Основные команды MATLAB для эффективных вычислений
- Матрицы в MATLAB: Создание, индексация, удаление строк/столбцов и операции
- Числа в MATLAB: типы, хранение и преобразование