Repmat with pattern

6 visualizaciones (últimos 30 días)
Mohammad Tabesh
Mohammad Tabesh el 20 de En. de 2012
Does anyone know an efficient way of replicating a matrix in a predetermined pattern(such as diagonal or triangular)?
Some examples: 1. We have A=[1,2;3,4] and we want B=[A,zeros(2);zeros(2),A] 2. We have A=[1,2;3,4] and we want B=[A,zeros(2);A,A] 3. We have a=[1;2;3;4] and we want B=[a,zeros(4,1);zeros(4,1),a]

Respuesta aceptada

Walter Roberson
Walter Roberson el 20 de En. de 2012
  1. kron([1 0;0 1],A)
  2. kron([1 0;1 0],A)
  3. kron([1 0 0;0 0 1],A)
That is, put a 1 for each copy of A that should appear, and put a 0 for each place 0's the same size as A should appear.
  6 comentarios
Andrew Newell
Andrew Newell el 21 de En. de 2012
Right, but lowercase a is a 4 x 1 vector.
Walter Roberson
Walter Roberson el 21 de En. de 2012
Ah, I missed that different variables were being used.

Iniciar sesión para comentar.

Más respuestas (1)

Andrew Newell
Andrew Newell el 20 de En. de 2012
For 1. you could use
B = blkdiag(A,A);
For 2, why not just use the command you gave?
B=[A,zeros(2);A,A] ;
For 3:
B=[a' zeros(1,4); zeros(1,4) a']'
EDIT: Here is a generalization of 1:
n = 3; % e.g.
Amat = repmat(A,n,1);
Acell = mat2cell(Amat,2*ones(1,n),2);
B = blkdiag(Acell{:})
  1 comentario
Mohammad Tabesh
Mohammad Tabesh el 20 de En. de 2012
Thanks for the answer but the point is that I don't want to hard code the number of times I need to replicate the A matrix (Imagine that I need 10 replications of A for example 2)

Iniciar sesión para comentar.

Categorías

Más información sobre Matrices and Arrays en Help Center y File Exchange.

Community Treasure Hunt

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

Start Hunting!

Translated by