sparse matrix operations to gain efficiency
古いコメントを表示
[EDITED]
Hello,
I've never really used sparse matrices before but I was wondering if it would be useful in my case to imporve efficiency. My code is as follows
reac=25;spec=20;
kf=rand(1,reac); kb=rand(1,reac);
C=rand(1,spec);
fwd=zeros(reac,spec);bcwd=zeros(reac,spec);
for i=1:reac
a=randi([1 3],1,5);b=randi([1 spec],1,5);
fwd(i,b)=a;
c=randi([1 3],1,5);d=randi([1 spec],1,5);
bcwd(i,d)=c;
end
i=1:reac;q=kf(i)'.*prod(C.^fwd(i,:),2)-kb(i)'.*prod(C.^bcwd(i,:),2);
sto=fwd-bcwd;
i=1:spec;rate(i)=sum(sto(:,i).*q,1);
I've used an example of reac=25 and spec=20 but in reality I could have reac up to 1500 and spec up to 500. I use the values of rate in differential equations which I solve using ode15s. This is the part of my code that takes the longest, where fwd and bcwd are sparse matrices. Would truning them into sparse matrices using sparse help me? if so, how can I rewrite my code?
An help is appreciated,
Thank you!
3 件のコメント
AM
2019 年 7 月 16 日
It is likely more complex than this.
The gain in performance obtained from using sparse matrices generally involves building vectors I, J, and V of row and column indices and values of non-zero elements, and building a sparse matrix in one shot with a call like
S = sparse( I, J, V, nRows, nCols ) ;
You can easily build I using REPELEM and V using RANDI. But building J is not direct and you must enforce unique values (per row) otherwise the accumlating behavior of SPARSE will produce a side effect that you may not want.
To illustrate this behavior, look at the following:
>> S = sparse( [1 2 1], [1 2 1], [10 20 30], 2, 2 )
S =
(1,1) 40
(2,2) 20
Here you can see that as there were two elements (10 and 30) with same indices (1,1), the values were accumulated (summed) and S(1,1)=10+30=40.
PS: if you wanted to enforce uniqueness, you could use RANDPERM, but it won't allow you to generate J in one shot as far as I can tell.
採用された回答
その他の回答 (0 件)
カテゴリ
ヘルプ センター および File Exchange で Creating and Concatenating Matrices についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!