Этот пост является частью серии упражнений из курса Эндрю Нг по машинному обучению на Coursera. Исходный код, текст упражнения и файлы данных для этого сообщения доступны здесь.

Также отметьте Часть-1, Часть-2, Часть-4 и Часть-5.

Матрицы и векторы

Матрицы представляют собой двумерные массивы:

⎡⎣⎢⎢⎢ adgj; behk; cfil ⎤⎦⎥⎥⎥

Вышеупомянутая матрица имеет четыре строки и три столбца, поэтому это матрица 4 x 3.

Вектор - это матрица с одним столбцом и множеством строк:

⎡⎣⎢⎢ wxyz ⎤⎦⎥⎥

Итак, векторы - это подмножество матриц. Вышеупомянутый вектор представляет собой матрицу 4 x 1.

Обозначения и термины:

  • Aij относится к элементу в i-й строке и j-м столбце матрицы A.
  • Вектор с 'n' строками называется n-мерным вектором.
  • vi относится к элементу в i-й строке вектора.
  • В общем, все наши векторы и матрицы будут индексированы 1. Обратите внимание, что для некоторых языков программирования массивы индексируются 0.
  • Матрицы обычно обозначаются заглавными буквами, а векторы - строчными.
  • «Скалярный» означает, что объект представляет собой одно значение, а не вектор или матрицу.
  • R относится к набору скалярных действительных чисел.
  • Rn относится к набору n-мерных векторов действительных чисел.

Сложение и скалярное умножение

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

[ac;bd]+[wy;xz]=[a+wc+yb+xd+z]

Матрицы вычитания:

[ac;bd]−[wy;xz]=[awcybxdz]

Чтобы сложить или вычесть две матрицы, их размеры должны быть одинаковыми.

При скалярном умножении мы просто умножаем каждый элемент на скалярное значение:

[ac;bd]∗x=[axcxbxdx]

При скалярном делении мы просто делим каждый элемент на скалярное значение:

[ac;bd]/x=[a/xc/xb/xd/x]

Умножение матрицы на вектор

Мы сопоставляем столбец вектора с каждой строкой матрицы, умножая каждый элемент и суммируя результат.

⎡⎣ ace; bdf ⎤⎦ ∗ [xy] = ⎡⎣⎢ ax + by; cx + dy; ex + fy ⎤⎦⎥

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

Умножение матрицы m x n на вектор n x 1 дает вектор m x 1.

Матрица-матричное умножение

Мы умножаем две матрицы, разбивая их на несколько векторных умножений и объединяя результат.

⎡⎣ ace; bdf ⎤⎦ ∗ [wy; xz] = ⎡⎣⎢ aw + by; cw + dy; e ш + fy; ax + bz; cx + dz; ex + f z ⎤⎦⎥

Умножение матрицы m x n на матрицу n x o дает матрицу m x o. В приведенном выше примере матрица 3 x 2 умноженная на матрицу 2 x 2 привела к матрице 3 x 2.

Свойства умножения матриц

  • Матрицы не коммутативны: ABBA
  • Матрицы ассоциативны: (AB) ∗ C = A ∗ (B C)

единичная матрица при умножении на любую матрицу той же размерности дает исходную матрицу. Это похоже на умножение чисел на 1. В единичной матрице просто есть единицы на диагонали (от верхнего левого угла до нижнего правого по диагонали) и нулей в других местах.

⎡⎣100;010;001⎤⎦

При умножении единичной матрицы на некоторую матрицу (A ∗ I) размерность квадратной единичной матрицы должна совпадать с столбцами другой матрицы. При умножении единичной матрицы на какую-либо другую матрицу (I ∗ A) размерность квадратной единичной матрицы должна совпадать с строками другой матрицы.

Инверсия и транспонирование

Обратная матрица A обозначается A −1. Умножение на обратное дает единичную матрицу.

Неквадратная матрица не имеет обратной матрицы. Мы можем вычислять инверсии матриц в октаве с помощью функции pinv (A) и в Matlab с помощью inv (A ) функция. Матрицы, у которых нет обратного, бывают единственными или вырожденными.

транспонирование матрицы похоже на поворот матрицы на 90 ° по часовой стрелке, а затем на обратное. Мы можем вычислить транспонирование матриц в matlab с помощью функции транспонирования (A) или A ’:

A = ⎡⎣ ace; bdf ⎤⎦ AT = [ab; cd; ef]

Другими словами:

Aij = ATji

Ссылки :: Andrew Ng

Заключительные слова:

Также отметьте Часть-1, Часть-2, Часть-4 и Часть-5.

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

Хорошего дня !!!

Удачного кодирования !!