Быстрый и параллельный алгоритм для A * A ^ T, где A - разреженная матрица 0-1 - PullRequest
1 голос
/ 22 июня 2019

Учитывая, что А является большой разреженной матрицей 0-1 (необязательно квадратной матрицы). Я хочу вычислить B = A*A^T, где A^T - транспонирование A. Обратите внимание, что хотя A является матрицей 0-1, B не является матрицей 0-1.

Кроме того, этот вопрос имеет следующие особенности:

  1. Мне не нужны элементы по диагонали B, поэтому можно либо удалить их после вычисления, либо игнорировать их при вычислении.

  2. Мне нужно знать только значения всех ненулевых элементов в B (кроме элементов на диагонали), поэтому все в порядке, если программа выдает только список, содержащий все ненулевые элементы. Однако повторяющиеся элементы не могут быть объединены: например, если B[2,3] = B[2,4] = 1, тогда этот список должен содержать два '1 вместо одного.

  3. Поскольку B должна быть симметричной матрицей, также можно указать только ее верхнюю или нижнюю часть.

Я пытался использовать Eigen (http://eigen.tuxfamily.org/). Но функции разреженной матрицы в Eigen специально не оптимизированы для этой проблемы, я надеюсь получить более эффективные алгоритмы.

Любой алгоритм, библиотека с открытым исходным кодом или статьи приветствуются.

Смежные вопросы: Какой лучший способ умножить большую и разреженную матрицу с помощью ее транспонирования?

разреженный разреженный продукт A ^ T * A optim в Eigen lib

...