Учитывая, что А является большой разреженной матрицей 0-1 (необязательно квадратной матрицы). Я хочу вычислить B = A*A^T
, где A^T
- транспонирование A
. Обратите внимание, что хотя A является матрицей 0-1, B не является матрицей 0-1.
Кроме того, этот вопрос имеет следующие особенности:
Мне не нужны элементы по диагонали B
, поэтому можно либо удалить их после вычисления, либо игнорировать их при вычислении.
Мне нужно знать только значения всех ненулевых элементов в B
(кроме элементов на диагонали), поэтому все в порядке, если программа выдает только список, содержащий все ненулевые элементы. Однако повторяющиеся элементы не могут быть объединены: например, если B[2,3] = B[2,4] = 1
, тогда этот список должен содержать два '1 вместо одного.
Поскольку B
должна быть симметричной матрицей, также можно указать только ее верхнюю или нижнюю часть.
Я пытался использовать Eigen (http://eigen.tuxfamily.org/). Но функции разреженной матрицы в Eigen специально не оптимизированы для этой проблемы, я надеюсь получить более эффективные алгоритмы.
Любой алгоритм, библиотека с открытым исходным кодом или статьи приветствуются.
Смежные вопросы:
Какой лучший способ умножить большую и разреженную матрицу с помощью ее транспонирования?
разреженный разреженный продукт A ^ T * A optim в Eigen lib