Why is this sparse multiplication failing?

3 vues (au cours des 30 derniers jours)
Patrick Mboma
Patrick Mboma le 7 Juin 2018
Commenté : sloppydisk le 7 Juin 2018
Hi,
Why does Matlab run out of memory on the multiplication of these two sparse matrices?
The first one is of size 17249876309 x 29 but only has 7 non-zeros elements that are all on different rows and on different (albeit adjacent) columns.
The second one is of size 29 x 82 and has 432 non-zeros elements.
I can certainly exploit the nature of the sparsity in these two matrices, do the multiplication and reconstruct the big matrix.
Why does Matlab fail at doing this?
Thanks
  2 commentaires
James Tursa
James Tursa le 7 Juin 2018
What MATLAB version & OS? 32-bit or 64-bit?
Patrick Mboma
Patrick Mboma le 7 Juin 2018
Windows 64-bit

Connectez-vous pour commenter.

Réponse acceptée

sloppydisk
sloppydisk le 7 Juin 2018
You could use the relevant indices to perform the multiplication:
b = sparse(17249876309, 29);
b(430: 490) = 1;
c = sparse(ones(29, 82));
[row, col] = find(b);
d = sparse(size(b, 1), size(c, 2));
d(row, 1:end) = b(row, :)*c;
spy(d)
h=gcf;
set(h.Children,'Ylim',[400 500]);
However it's probably not even necessary to construct the whole matrix again. Note that you have to use 1:end instead of : in the assignment, otherwise you get a memory error.
  4 commentaires
Patrick Mboma
Patrick Mboma le 7 Juin 2018
problems that I think cannot be solved for now: the matrices grow bigger and bigger and at some point I can no longer do
r = sparse(ii,jj,v,ra,cb);
sloppydisk
sloppydisk le 7 Juin 2018
What are you trying to do anyway? There must be an easier way, right?

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by