Putting one matrix a varying number of times along the diagonal of another matrix
5 次查看(过去 30 天)
显示 更早的评论
I have a matrix A which is 6x6. I need to create another matrix where A is along the diagonal with the other entries being 0. I know I could use blkdiag() for this, but the issue is I need to have as many entries of A as the value of another variable that appears earlier in the code. Let's call it n. Sometimes n could be 2, so the matrix would be a 12x12 with A along the diagonal. Sometimes n could be 100 so the ouput matrix would be 600x600 since A needs to appear 100 times. How could I go about automating this process so I don't have to write blkdiag(A,A,A,A...)? Thanks!
0 个评论
采纳的回答
John D'Errico
2022-6-23
A = rand(3);
n = 50;
Acell = repmat({sparse(A)},[1,n]);
B = blkdiag(Acell{:});
spy(B)
Note that I made A sparse in there, so that the final resulting matrix will also be sparse.
4 个评论
Steven Lord
2022-6-23
M = magic(3)
N = 4;
C = repmat({M}, 1, N)
B = blkdiag(C{:}) % Equivalent to blkdiag(M, M, M, M)
Search the documentation for "comma-separated list" for an explanation of how that last line works.
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Operating on Diagonal Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!