Borrar filtros
Borrar filtros

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

3 visualizaciones (últimos 30 días)
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.

Respuesta aceptada

the cyclist
the cyclist el 11 de Nov. de 2014
Editada: the cyclist el 11 de Nov. de 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 comentario
Ongun
Ongun el 11 de Nov. de 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.

Iniciar sesión para comentar.

Más respuestas (1)

yeungor
yeungor el 9 de Jul. de 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

Categorías

Más información sobre Matrix Indexing en Help Center y File Exchange.

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by