Рассмотрим быстрое матричное умножение XDX ^ T для матрицы X n n на m и диагональной матрицы D a m на m. Здесь m >> n (предположим, n около 1000, m около 100000). В моем приложении X является фиксированной матрицей, и значения D могут меняться на каждой итерации.
Какой быстрый способ рассчитать это? На данный момент я просто делаю простое умножение в C ++.
РЕДАКТИРОВАТЬ: я должен уточнить мою текущую процедуру, это не "простое умножение". В частности, я колонизирую умножение X на квадратный корень из диагональных элементов D, чтобы получить A: = XD ^ {1/2}. Затем я непосредственно вычисляю A * t (A) (то есть умножение матрицы n на m с ее транспонированием).
Спасибо.