Сток разреженная матрица - PullRequest
0 голосов
/ 07 декабря 2018

У меня очень большая матрица (например, 10000x10000) для хранения в файле.Очевидно, что для этого требуется довольно много бесполезной памяти, поскольку в ней много нулей.

Я нашел в википедии способ хранения такой матрицы:

https://en.wikipedia.org/wiki/Sparse_matrix#Compressed_sparse_row_(CSR,_CRS_or_Yale_format)

Мне удалось связать три массива с матрицей.Но теперь я хочу сделать обратное: учитывая эти три массива, я бы хотел восстановить исходную матрицу.Я знаю, в какой столбец я должен поместить элементы в массиве A (ну, он указан в массиве JA), но я не знаю, в какой строке я должен их разместить.

Любая помощь, пожалуйста?

Большое спасибо.

1 Ответ

0 голосов
/ 07 декабря 2018

Чтобы определить, в какую строку их поместить, вам нужно использовать IA и A.

Работать в обратном направлении и вычислять список

IA' = {IA[m+1] - IA[m], IA[m] - IA[m-1], IA[m-1] - IA[m-2],..., IA[2]-IA[1], IA[1]-IA[0]}

списокIA 'скажет вам, сколько записей A нужно добавить в нижний ряд матрицы.

Вы уже знаете, куда их добавить, используя J.

So

IA' = [4-3, 3-2, 2-0, 0]
IA' = [1,1,2,0] 

для приведенного ниже примера википедии:

   A  = [5,8,3,6]
   IA = [0,0,2,3,4]
   JA = [0,1,2,1]

, что означает, что последний элемент A идет в нижнем ряду, второй за последним идет в ряду от этого, а первые 2 элементаПерейти на 3-й ряд вверх.В верхней строке нет записей.

обращение IA 'к IA' может сделать реализацию более простой, поскольку вместо этого вы можете обрабатывать строки вниз и интерпретировать их следующим образом:

IA'' = [0,2,1,1]
A    = [5,8,3,6]

в верхнем ряду 0 записей.В следующей строке 2 записи [5,3].следующие 2 имеют по 1 записи, [3] и [6] соответственно.

...