#11. Произведение матриц и векторов, элементы линейной алгебры | NumPy уроки
Как выполнять векторное и матричное произведения в пакете NumPy. Функции: dot, matmul, inner, outer. Оператор @ заменяющий функцию dot. Рассматриваются элементы линейной алгебры модуля linalg. В частности: вычисление обратной матрицы, определение ранга матрицы.
Инфо-сайт: proproprogs.ru
NumPy: numpy.org/doc/stable/
Пікірлер: 32
спасибо
кто бы вы не был, ну вы Мужииик 😎
Спасибо за видео! Хотелось бы отметить одну неточность в видео: оператор @ вызывает не dot, а __matmul__ метод массива - a.__matmul__(b) = a @ b. Между ними есть разница, но она появляется только при размерностях N > 2. В matmul (в отличие от dot): Умножение на скаляры не допускается. Стопки матриц транслируются вместе, как если бы матрицы были элементами.
@selfedu_rus
Жыл бұрын
да, спасибо, ценное замечание!
Спасибо!
Математические формулы выглядят иногда очень страшно, но применение их на деле, намного проще чем ты думаешь.
Cпасибули)
Топ
Сергей,спасибо
Большой лайк !!!
Супер)
вот уточнение по поводу разницы dot() и matmul(): Тип матриц: np.dot() может выполнять умножение как для матриц, так и для векторов. np.matmul() выполняет умножение только для матриц. Если вы пытаетесь использовать np.matmul() для умножения векторов, он выдаст ошибку. Расширение матриц: np.dot() автоматически расширяет матрицы до соответствующего размера перед умножением. np.matmul() не выполняет автоматическое расширение и требует, чтобы размеры матриц были соответствующими. Порядок умножения: np.dot() выполняет умножение в соответствии с правилами умножения матриц, то есть он умножает соответствующие столбцы первой матрицы на соответствующие строки второй матрицы. np.matmul() выполняет то же самое умножение, но без автоматического расширения и без учета правил умножения матриц.
Лайк!
Исходя из линала, в результате умножения двух матриц с размерностями A(MxN) и B(NxL) получается матрица C(MxL). Если умножать вектор-строку (1, N) на вектор-столбец (N, 1) размер результирующей должен получиться (1х1). Если умножать вектор-столбец (M, 1) на вектор-строку (1, L) размер результирующей должен получиться (MхL). Зачем придуман inner и outer? inner будет транспонировать второй аргумент, если это плоский массив, чтобы получить столбец? А outer будет транспонировать первый аргумент также чтобы превратить его в столбец?
Оператор @ все же соответствует np.matmul(), а не np.dot(). Там есть нюансы.
@selfedu_rus
3 жыл бұрын
Да, в документации matmul. На сайте поправил. Спасибо!
a = np.matrix(a) b = np.matrix(b) a*b
Большое спасибо за видео! Но у меня осталось пара вопросов. На 215 секунде (3:35) вы определили внешнее умножение векторов. Но разве внешнее умножение векторов - это не объединение элементов в список с определенными свойствами (симплекс)? Просто если он как-то раскрывается или переходит в такое произведение, то можно ли где-то об этом прочитать? И почему тогда не выполняются свойства внешней алгебры (a * a = 0 и a * b = - b * a)?
@selfedu_rus
2 жыл бұрын
внешнее произведение - это то же самое, что и векторное произведение, а внутреннее - это скалярное произведение
@user-tt8ok4uw1z
2 жыл бұрын
@@selfedu_rus понял, спасибо)
@PinusTF2Spy
2 жыл бұрын
@@user-tt8ok4uw1z Почитайте про тензорное произведение, на русской википедии есть пример тензорного умножения двух векторов как частный случай тензорного произведения и на выходе получается матрица. В англоязычной литературе тензорное произведение часто называют "outer product" (дословно - внешнее произведение), а скалярное произведение - "inner product" (внутреннее) или "dot product". Тензорное произведение, кстати, не есть векторное произведение. Очевидно, что результат векторного произведения двух векторов - вектор, а тензорного - матрица. Внешняя алгебра тут не причём вроде бы, но я не настолько хорошо знаю "высшую алгебру" чтобы разбираться в различных видах алгебр. :)
У меня маленький вопросик, при решении систем уравнений X и Y должны быть столбцами, как NumPy решил систему ели вы Y задали строкой?
@dubinin_s
3 жыл бұрын
Понял, ответ Вы дали в видео минутой раньше)))
А в чем отличие matmul от dot? В интернете про стеки матриц говорится, не оч понятно
@selfedu_rus
2 жыл бұрын
написал в телеграм )
@user-dt9yp8im1t
2 ай бұрын
@@selfedu_rus добрый день. тоже интересен этот момент, но прошло столько времени. даже не понятно, когда и в каком именно телеграмм канале вы это написали. я понимаю, что нужно раскручивать тг, но было бы замечательно, если бы вы продублировали это здесь, потому что спустя столько времени найти эту запись крайне сложно!
Я что то не понял, на 12.37 Вы говорите что при умножении матрицы А на обратную матрица А, должна получиться единичная матрица (что логично), но у единичной матрицы на главной диагонали ложны быть единицы, а все остальные нули, а у Вас интерпритатор выдает другую матрицу (встречаются значения отличные от нуля не на главной оси).
@selfedu_rus
9 ай бұрын
Там почти нулевые значения. Дело в том, что вещественные числа в вычислительной технике не всегда удается представить точно, часто появляется небольшая погрешность.
@user-qj6tk5fw9p
9 ай бұрын
@@selfedu_rus понял, спасибо. спасибо за урок!
спасибо