How to replicate an array diagonally for a given number of times?
9 views (last 30 days)
Show older comments
I would like to replicate an array diagonally for a given number of times, so repmat command does not work in my case. I also tried blkdiag, but I have to write the name of the matrix 5 times if I want it to be recreated five times. I heard that it can be done with convolution from a friend of mine, yet my aim is to achieve the effect using basic commands.
0 Comments
Accepted Answer
the cyclist
on 11 Nov 2014
Edited: the cyclist
on 11 Nov 2014
Here is a very mundane way to do it. (I've assumed a square input, but it could easily be generalized.)
A = magic(5);
m = size(A,1);
N = 3;
AN = zeros(N*m);
for n=1:N
range = (n-1)*m+1:n*m;
AN(range,range) = A;
end
More Answers (1)
yeungor
on 9 Jul 2018
Alternatively, if you're not against "eval", you can use it to type out those repetitions n times.
a = rand(m,n);
N = 100;
A = eval(['blkdiag(a' repmat(',a', 1, N) ');']);
But the convolution way seems like less of a hack and it's still one line, it's a shame that it's black magic
1 Comment
See Also
Categories
Find more on Matrices and Arrays in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!