Создание , конкатенация и расширение матрицы

Наиболее базовой структурой данных MATLAB ® является матрица. Матрица является двумерным, прямоугольным массивом элементов данных, расположенных в строках и столбцах. Элементами могут быть числа, логические значения (true или false), даты и времена, строки или какой-либо другой тип данных MATLAB.

Даже одно число сохранено в виде матрицы. Для примера переменная, содержащая значение 100, сохранена как матрица типа 1 на 1 double.

A = 100;
whos A
  Name      Size            Bytes  Class     Attributes

  A         1x1                 8  double              

Построение матрицы данных

Если у вас есть определенный набор данных, можно расположить элементы в матрице с помощью квадратных скобок. Одна строка данных имеет пространства или запятые, промежуточные элементы, а точка с запятой разделяет строки. Например, создайте одну строку четырех числовых элементов. Размер получившейся матрицы 1 на 4, поскольку она имеет 1 строку и 4 столбца. Матрица этой формы часто упоминается как вектор-строка.

A = [12 62 93 -8]
A = 1×4

    12    62    93    -8

sz = size(A)
sz = 1×2

     1     4

Теперь создайте матрицу с одинаковыми числами, но расположите их в две строки. Эта матрица имеет две строки и два столбца.

A = [12 62; 93 -8]
A = 2×2

    12    62
    93    -8

sz = size(A)
sz = 1×2

     2     2

Специализированные матричные функции

MATLAB имеет много функций, которые помогают создавать матрицы с определенными значениями или определенной структурой. Для примера, zeros и ones функции создают матрицы всех нулей или всех них. Первый и второй аргументы этих функций являются количеством строк и количеством столбцов матрицы, соответственно.

A = zeros(3,2)
A = 3×2

     0     0
     0     0
     0     0

B = ones(2,4)
B = 2×4

     1     1     1     1
     1     1     1     1

The diag функция помещает входные элементы на диагональ матрицы. Например, создайте вектор-строку A содержит четыре элемента. Затем создайте матрицу 4 на 4, диагональные элементы которой являются элементами A.

A = [12 62 93 -8];
B = diag(A)
B = 4×4

    12     0     0     0
     0    62     0     0
     0     0    93     0
     0     0     0    -8

Конкатенация матриц

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

A = ones(1,4);
B = zeros(1,4);
C = [A B]
C = 1×8

     1     1     1     1     0     0     0     0

Организация A и B в качестве двух строк матрицы используйте точку с запятой.

D = [A;B]
D = 2×4

     1     1     1     1
     0     0     0     0

Чтобы объединить две матрицы, они должны иметь совместимые размеры. Другими словами, когда вы конкатенируете матрицы горизонтально, они должны иметь одинаковое число строк. Когда вы соединяете их вертикально, они должны иметь одинаковое число столбцов. Например, горизонтально конкатенируйте две матрицы, обе имеют две строки.

A = ones(2,3)
A = 2×3

     1     1     1
     1     1     1

B = zeros(2,2)
B = 2×2

     0     0
     0     0

C = [A B]
C = 2×5

     1     1     1     0     0
     1     1     1     0     0

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

D = horzcat(A,B)
D = 2×5

     1     1     1     0     0
     1     1     1     0     0

Генерация числовой последовательности

The colon является удобным способом создать матрицы, элементы которых расположены последовательно и равномерно. Для примера создайте вектор-строку, элементы которой являются целыми числами от 1 до 10.

A = 1:10
A = 1×10

     1     2     3     4     5     6     7     8     9    10

Можно использовать оператор двоеточия, чтобы создать последовательность чисел в любой области значений, с единичным шагом.

A = -2.5:2.5
A = 1×6

   -2.5000   -1.5000   -0.5000    0.5000    1.5000    2.5000

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

A = 0:2:10
A = 1×6

     0     2     4     6     8    10

Для уменьшения используйте отрицательное число.

A = 6:-1:0
A = 1×7

     6     5     4     3     2     1     0

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

A = 1:0.2:2.1
A = 1×6

    1.0000    1.2000    1.4000    1.6000    1.8000    2.0000

Расширение матрицы

Можно добавить к матрице один или несколько элементов путем размещения их вне существующих контуров индексов строк и столбцов. MATLAB автоматически заполняет матрицу нулями, чтобы сохранить ее прямоугольной. Например, создайте матрицу 2 на 3 и добавьте к ней дополнительную строку и столбец путем вставки элемента в положение (3,4).

A = [10  20  30; 60  70  80]
A = 2×3

    10    20    30
    60    70    80

A(3,4) = 1 
A = 3×4

    10    20    30     0
    60    70    80     0
     0     0     0     1

Можно также расширить размер, вставив новую матрицу вне существующих областей значений индексов.

A(4:5,5:6) = [2 3; 4 5]
A = 5×6

    10    20    30     0     0     0
    60    70    80     0     0     0
     0     0     0     1     0     0
     0     0     0     0     2     3
     0     0     0     0     4     5

Чтобы неоднократно расширять размер матрицы, например, в for цикл, обычно лучше всего предварительно выделять пространство для самой большой матрицы, которую вы ожидаете создать. Без предварительного выделения MATLAB должен выделять память каждый раз, когда размер увеличивается, замедляя операции. Например, предварительно выделите матрицу, которая содержит до 10 000 строк и 10 000 столбцов путем инициализации ее элементов в нуль.

A = zeros(10000,10000);

Если вам нужно предварительно выделить дополнительные элементы позже, можно развернуть его, присвоив вне матричного индекса областей значений или конкатенировать другую предварительно выделенную матрицу с A.

Пустые массивы

Пустой массив в MATLAB является массивом с, по крайней мере, одной длиной размерности, равной нулю. Пустые массивы полезны для представления концепции «ничего» программно. Например, предположим, что вы хотите найти все элементы массива вектора, которые меньше 0, но их нет. The find функция возвращает пустой вектор индексов, указывая, что ей не удалось найти элементы меньше 0.

A = [1 2 3 4];
ind = find(A<0)
ind =

  1x0 empty double row vector

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

TF = isempty(ind)
TF = logical
   1

Похожие темы