rbmatlab  1.16.09
 All Classes Namespaces Files Functions Variables Modules Pages
spblkdiag.m
1 function M = spblkdiag(blocks)
2 %function M = spblkdiag(blocks)
3 %
4 % function generating efficiently a sparse matrix containing
5 % subblocks blocks(:,:,i) as block i along the diagonal.
6 % this is 1000 times faster than blkdiag!!!!
7 %
8 % Bernard Haasdonk 31.8.2009
9 
10 [n,m,k] = size(blocks);
11 
12 row_ind = (1:n)'*ones(1,m*k);
13 row_offs =(ones(n*m,1)*(0:(k-1)))*n;
14 row_ind = row_ind(:)+row_offs(:);
15 
16 col_ind = ones(n,1)*(1:(m*k));
17 col_ind = col_ind(:);
18 
19 M = sparse(row_ind,col_ind,blocks(:));%| \docupdate