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

Самая основная структура данных MATLAB® является матрицей. Матрица A является двумерным, прямоугольным массивом элементов данных, расположенных в строках и столбцах. Элементами могут быть числа, логические значения (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 этой формы часто упоминается как вектор-строка.

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

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

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

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, но нет ни одного. find функция возвращает пустой вектор индексов, указывая, что она не могла найти элементы меньше чем 0.

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

  1x0 empty double row vector

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

TF = isempty(ind)
TF = logical
   1

Похожие темы