Как бы вы слили разреженные матрицы, чтобы создать новую разреженную матрицу? - PullRequest
0 голосов
/ 04 декабря 2018

Я пытаюсь добиться следующего:

Given A(m,n), B(m,q), C(p,n), D(p,q), sparse matrices.
Create E(m+p,n+q), a sparse matrix, like :
E = | A B |
    | C D |

Я пробовал следующее:

  • Eigen - единственный способ, которым я нашел, чтобы добиться этого, это читать все неОбнуляет значения из A, B, C и D, сохраняет их в std::vector<Triplet> и создает E с setFromTriplets.Это слишком сложно.
  • Intel MKL - алгоритм был таким же, за исключением того, что я использовал представление хранилища Block Sparse Row.Сначала прочитайте ненулевые значения, затем вызовите конструктор.Та же сложность, не пригодная для использования.

Проблема с этими библиотеками состоит в том, что E конструируется так же, как любая разреженная матрица, без использования того факта, что между частями E и A, B, C существуют избыточности,D.Я полагаю, что можно построить E просто путем переиндексирования того, что хранится во внутренних структурах A, B, C и D.

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

Идеальное решение - не использовать схему хранения блоков, чтобы разреженность основывалась на нулевых значениях, а не на нулевых блоках.

Язык программирования не имеет значения.

Спасибозаранее.

...