How to replicate an array diagonally for a given number of times?
9 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Ongun
el 11 de Nov. de 2014
Comentada: yeungor
el 23 de Jul. de 2018
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 comentarios
Respuesta aceptada
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
Más respuestas (1)
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
1 comentario
yeungor
el 23 de Jul. de 2018
a = rand(m,n);
A = kron(eye(N), a)
Also works quite well
Ver también
Categorías
Más información sobre Matrices and Arrays 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!