Промышленное производство
Промышленный Интернет вещей | Промышленные материалы | Техническое обслуживание и ремонт оборудования | Промышленное программирование |
home  MfgRobots >> Промышленное производство >  >> Industrial programming >> MATLAB

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

Пример использования 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 = 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

  1. Массивы в C#: объявление, инициализация и операции
  2. Зубчатые массивы в C#: объявление, инициализация и доступ
  3. Техники копирования массивов в Java: подробное руководство
  4. Массивы в C++: объявление, инициализация и работа с указателями
  5. Динамическое выделение массивов в C++: практическое руководство с примерами кода
  6. MATLAB: Комплексный обзор ведущей среды численных вычислений
  7. Переменные в MATLAB: Основы, примеры и работа с векторами/матрицами
  8. Основные команды MATLAB для эффективных вычислений
  9. Матрицы в MATLAB: Создание, индексация, удаление строк/столбцов и операции
  10. Числа в MATLAB: типы, хранение и преобразование