Я оптимизирую код, который в значительной степени зависит от специальной библиотеки Matrix (которая не будет исключена из проекта, потому что она есть повсюду. Это неприятно, но это факт ...) Многие вычисления выполняются с матрицами из 10-20 строк и столбцов, многие вычисления включают квадратичную форму, например
C = A*B*A'
. Я понял, что часто A является разреженным, и я хотел бы использовать этот факт. Итак, я ищу алгоритм, который справился бы с этим случаем. Числовая стабильность важна. Есть что-нибудь, что я могу использовать? (Я не писал нашу библиотеку, поэтому не знаю, есть ли какие-то подводные камни, которые я должен учитывать?)
Поскольку «наш» простой метод умножения O (n ^ 3) выполняется быстрее, чем Eigen 3 на цели платформы, поскольку мне нужна числовая стабильность, а матрицы не очень большие, я полагаю, что алгоритм Штрассена, а также алгоритм Копперсмита – Винограда - не то, что я ищу. Вместо этого это просто умножение на квадратичную форму, позволяющее мне легко проверять нули в A.
Спасибо за любые предложения!