Repmat with pattern

5 vues (au cours des 30 derniers jours)
Mohammad Tabesh
Mohammad Tabesh le 20 Jan 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]

Réponse acceptée

Walter Roberson
Walter Roberson le 20 Jan 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 commentaires
Andrew Newell
Andrew Newell le 21 Jan 2012
Right, but lowercase a is a 4 x 1 vector.
Walter Roberson
Walter Roberson le 21 Jan 2012
Ah, I missed that different variables were being used.

Connectez-vous pour commenter.

Plus de réponses (1)

Andrew Newell
Andrew Newell le 20 Jan 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 commentaire
Mohammad Tabesh
Mohammad Tabesh le 20 Jan 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)

Connectez-vous pour commenter.

Catégories

En savoir plus sur Matrices and Arrays dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by