Как я могу представить симметричную матрицу в формате CSR?

Хотя я использую C, я считаю, что язык программирования и код не имеют значения.

Я хочу представить симметричную матрицу в формате CSR для быстрого матрично-векторного произведения.

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

Пример:

0 2 3 5
2 0 1 4
3 1 0 9
5 4 9 0

Входной поток:

0 2 3 5 0 1 4 0 9 0

Если бы мне нужно было построить обычную матрицу, скажем, из двумерного массива, это было бы легко. Все, что мне нужно, это данные, которые я получаю. Это не относится к представлению CSR.


person Judismar Arpini Junior    schedule 05.05.2017    source источник
comment
Одна идея, которую я имею, состоит в том, чтобы создать транспонирование верхней треугольной матрицы. Я бы не потерял никакой эффективности при выполнении матрично-векторного произведения.   -  person Judismar Arpini Junior    schedule 05.05.2017


Ответы (1)


Все, что мне нужно было сделать, это перенести матрицу в CSR. Таким образом, продукт матрицы-вектора по-прежнему эффективен и прост в реализации.

Создание транспонирования требует много времени, а также удваивает использование памяти.

Это лучшая идея, которая у меня могла быть. Я ценю любое другое.

person Judismar Arpini Junior    schedule 05.05.2017