How to replicate an array diagonally for a given number of times?
2 Ansichten (letzte 30 Tage)
Ältere Kommentare anzeigen
Ongun
am 11 Nov. 2014
Kommentiert: yeungor
am 23 Jul. 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 Kommentare
Akzeptierte Antwort
the cyclist
am 11 Nov. 2014
Bearbeitet: the cyclist
am 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
Weitere Antworten (1)
yeungor
am 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 Kommentar
yeungor
am 23 Jul. 2018
a = rand(m,n);
A = kron(eye(N), a)
Also works quite well
Siehe auch
Kategorien
Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!