Vectorized operation of sparse matrix
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
采纳的回答
Matt J
2019-3-5
编辑:Matt J
2019-3-5
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
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Characters and Strings 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!