Быстрее, чем numpy.matmul для умножения матрицы на ее транспонирование

#numpy #matrix #transpose #matrix-multiplication #dot-product

Вопрос:

У меня есть большой 2D массив NumPy M в python, и я хочу вычислить numpy.matmul(M, M.T) или , что то же самое, numpy.dot(M, M.T) .

Однако numpy.matmul и numpy.dot не буду использовать симметрию, связанную с умножением с транспонированием, поэтому я считаю, что выполняю вдвое больше работы, чем мне действительно нужно.

Есть ли простой способ сделать это быстрее, используя симметрию и выполняя только половину работы? Возможно, есть функция NumPy/SciPy или какая-то другая библиотека python, о которой я не знаю, которая выполняет это?

Комментарии:

1. Это ответ на ваш вопрос? Или эта бумага ?

2. @Ivan Спасибо, но я должен был уточнить, что мне было интересно, есть ли какая-то библиотека numpy или другая библиотека python, о которой я не знаю, которая делает это, и использует тот факт, что если A-это конечный продукт, то A[i][j] = A[j][i]

3. Откуда вы знаете matmul , что не использует симметрию? Просто отсутствие явных параметров управления? Вы делали какие-нибудь тесты на время?

4. @hpaulj Ах Я верю, что вы правы, пожалуйста, посмотрите мой ответ ниже

Ответ №1:

Кто-то сообщил мне, что numpy на самом деле уже объясняет симметрию:

https://github.com/numpy/numpy/blob/9a1229f86ca4d4041c9aa48027a21c7ad97da748/numpy/core/src/umath/matmul.c.src#L157