Этот пост является частью серии упражнений из курса Эндрю Нг по машинному обучению на 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]=[a−wc−yb−xd−z]
Чтобы сложить или вычесть две матрицы, их размеры должны быть одинаковыми.
При скалярном умножении мы просто умножаем каждый элемент на скалярное значение:
[ac;bd]∗x=[a∗xc∗xb∗xd∗x]
При скалярном делении мы просто делим каждый элемент на скалярное значение:
[ac;bd]/x=[a/xc/xb/xd/x]
Умножение матрицы на вектор
Мы сопоставляем столбец вектора с каждой строкой матрицы, умножая каждый элемент и суммируя результат.
⎡⎣ ace; bdf ⎤⎦ ∗ [xy] = ⎡⎣⎢ a ∗ x + b ∗ y; c ∗ x + d ∗ y; e ∗ x + f ∗ y ⎤⎦⎥
В результате получается вектор. Количество столбцов матрицы должно равняться количеству строк вектора.
Умножение матрицы m x n на вектор n x 1 дает вектор m x 1.
Матрица-матричное умножение
Мы умножаем две матрицы, разбивая их на несколько векторных умножений и объединяя результат.
⎡⎣ ace; bdf ⎤⎦ ∗ [wy; xz] = ⎡⎣⎢ a ∗ w + b ∗ y; c ∗ w + d ∗ y; e ∗ ш + f ∗ y; a ∗ x + b ∗ z; c ∗ x + d ∗ z; e ∗ x + f ∗ z ⎤⎦⎥
Умножение матрицы m x n на матрицу n x o дает матрицу m x o. В приведенном выше примере матрица 3 x 2 умноженная на матрицу 2 x 2 привела к матрице 3 x 2.
Свойства умножения матриц
- Матрицы не коммутативны: A ∗ B ≠ B ∗ A
- Матрицы ассоциативны: (A ∗ B) ∗ 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
Хорошего дня !!!
Удачного кодирования !!