Моя большая разреженная симметричная матрица хранится как сжатая разреженная строка (CSR) с использованием Intel MKL
.Для примера, давайте предположим, что моя симметричная разреженная матрица имеет вид 5x5
:
A =
1 -1 0 -3 0
-1 5 0 0 0
0 0 4 6 4
-3 0 6 7 0
0 0 4 0 -5
values = {1, -1, -3, 5, 4, 6, 4, 7, -5}; // symmetric sparse matrix
columns = {0, 1, 3, 1, 2, 3, 4, 3, 4}; // zero-based
rowIndex = {0, 3, 4, 7, 8, 9}; // zero-based
Я пытаюсь найти подматрицу A
, учитывая строки и столбцы, например, A(1:3, 2:4)
:
A(1:3,2:4) =
0 0 0
4 6 4
6 7 0
values = {4, 6, 4, 6, 7}; // General sparse matrix (sub-matrix is not necessarily symmetric)
columns = {0, 1, 2, 0, 1}; // zero-based
rowIndex = {0, 0, 3, 5}; // zero-based
Буду признателен за то, как можно выполнить индексирование матрицы.Один из способов, который я могу придумать, - это преобразовать CSR
в формат координат COO
и применить индексирование матрицы, а затем преобразовать его обратно в CSR
, что я не считаю эффективным способом.
Может ли кто-нибудь сообщить мне эффективный или распространенный способ разреженной индексации матриц?