Я пытаюсь добиться следующего:
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.
Вопрос заключается в следующем: как бы вы выполнили эту операцию слияния с разреженными матрицами?Какое программное обеспечение вы бы использовали?Какой алгоритм вы бы использовали?
Идеальное решение - не использовать схему хранения блоков, чтобы разреженность основывалась на нулевых значениях, а не на нулевых блоках.
Язык программирования не имеет значения.
Спасибозаранее.