#python #numpy #matrix-multiplication #numpy-ndarray
#python #numpy #умножение матрицы #numpy-ndarray
Вопрос:
Мне нужно выполнить следующие две операции:
-
решите,
Ax=b
перевернувn-by-n matrix A
, и -
решайте,
r=Ar
используя итерацию мощности (т. Е. Путем повторного умножения текущего вектора r на A), как это было бы сделано дляPageRank
алгоритма.
Мой вопрос: при вычислении матрично-векторного произведения A^{-1}b
или матрично-векторного произведения Ar
лучше использовать numpy.dot
или numpy.matmul
? (Я понимаю, что могут быть различия в более высоких измерениях, но мой вопрос касается только случая, когда A
это 2D-массив, а b
, r
— векторы.)
Комментарии:
1. Для 2 и 1d это не имеет значения. Они делают то же самое. У одного есть версия оператора, и некоторые добавили
ufunc
навороты, у другого — версия метода (и более короткое имя).
Ответ №1:
Из документа numpy для np.dot
:
Точечное произведение двух массивов. В частности, если оба a и b являются двумерными массивами, это умножение матрицы, но предпочтительнее использовать matmul или a @ b .
Итак, в основном для вашего случая это не имеет значения, хотя matmul
предпочтительнее в соответствии с документом.
Также, поскольку один из ваших массивов является одномерным, из документов для np.matmul
:
Если второй аргумент равен 1-D, он преобразуется в матрицу путем добавления 1 к ее размерам. После умножения матрицы добавленная 1 удаляется.
И:
matmul отличается от dot двумя важными способами: умножение на скаляры запрещено, вместо этого используйте *. Стеки матриц передаются вместе, как если бы матрицы были элементами, с соблюдением подписи
Следовательно, в вашем случае они будут работать одинаково, но я бы согласился с рекомендацией numpy doc по использованию matmul
.