How to replicate an array diagonally for a given number of times?

12 views (last 30 days)
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.

Accepted Answer

the cyclist
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
  1 Comment
Ongun
Ongun on 11 Nov 2014
Thanks it worked my friend suggested the following:
conv2(diag([upsample(ones(1,N-1),size(sub2D,1)),1]),sub2D);
with N being the number of replications, but yours are much easier to interpret.

Sign in to comment.

More Answers (1)

yeungor
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

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!