использовать ли функцию numpy dot или matmul

#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 .