Vectorized operation of sparse matrix

3 visualizzazioni (ultimi 30 giorni)
I have the following code
a = randi(903,10293,1800);
c = cell(1,10293);
for n = 1:10293
b = a(n,:);
i = b(1:length(b)-1);
j = b(2:length(b));
k = ones(1,length(b)-1);
s = sparse(i,j,k,903,903);
total = nansum(s,2);
p = s./total;
c{n} = p;
end
After it runs for sometime, matlab runs out of memory. Without the """ total = nansum(s,2); p = s./total; """ part, and setting c{n} =s, it runs fine. Can anyone tell me how to fix this and make the code run efficiently?

Risposta accettata

Matt J
Matt J il 5 Mar 2019
Modificato: Matt J il 5 Mar 2019
The problem is that you have lots of 0/0 operations occuring whenever total=0. These result in lots of NaNs in p rendering it highly non-sparse. I don't know how you wish to define the results of 0/0 in this situation, but here is one possibility for avoiding them:
a = randi(903,10293,1800);
c = cell(1,10293);
for n = 1:10293
b = a(n,:);
i = b(1:length(b)-1);
j = b(2:length(b));
k = ones(1,length(b)-1);
s = sparse(i,j,k,903,903);
total = nansum(s,2);
total(~total)=1; %<---Matt J inserted
p=s./total;
c{n} = p;
end

Più risposte (0)

Categorie

Scopri di più su Sparse Matrices in Help Center e File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by