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 件)
参考
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!