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

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!