Sparse matrix from the columns of an initial matrix
1 次查看(过去 30 天)
显示 更早的评论
Hello everyone, given a matrix A of size (m,n),
I would like to construct a matrix B of size (m,m*n) the following way :
for j = 1:n
col_start = (j-1)*m+1;
col_end = j*m;
B(:,col_start:col_end) = diag(A(:,j));
end
This version uses a for loop, is there any faster way of constructing B?
Thank you in advance.
0 个评论
回答(1 个)
Bjorn Gustavsson
2021-4-5
Something like this might work:
vals = [];
idx1 = [];
idx2 = [];
for j = 1:n
idx1 = [idx1,1:n];
col_start = (j-1)*m+1;
col_end = j*m;
idx2 = [idx2,col_start:col_end];
vals = [vals,A(:,j)'];
end
B2 = sparse(idx1,idx2,vals);
For optimal speed-improvements pre-allocate vals, idx1 and idx2 and assign those with indices instead of growing these arrays.
HTH
0 个评论
另请参阅
类别
在 Help Center 和 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!