Vectorized operation of sparse matrix
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Esegboria Osarhemen
el 5 de Mzo. de 2019
Comentada: Esegboria Osarhemen
el 6 de Mzo. de 2019
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?
0 comentarios
Respuesta aceptada
Matt J
el 5 de Mzo. de 2019
Editada: Matt J
el 5 de Mzo. de 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
Más respuestas (0)
Ver también
Categorías
Más información sobre Characters and Strings en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!