Repmat with pattern

6 ビュー (過去 30 日間)
Mohammad Tabesh
Mohammad Tabesh 2012 年 1 月 20 日
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]

採用された回答

Walter Roberson
Walter Roberson 2012 年 1 月 20 日
  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 件のコメント
Andrew Newell
Andrew Newell 2012 年 1 月 21 日
Right, but lowercase a is a 4 x 1 vector.
Walter Roberson
Walter Roberson 2012 年 1 月 21 日
Ah, I missed that different variables were being used.

サインインしてコメントする。

その他の回答 (1 件)

Andrew Newell
Andrew Newell 2012 年 1 月 20 日
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 件のコメント
Mohammad Tabesh
Mohammad Tabesh 2012 年 1 月 20 日
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)

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeCreating and Concatenating Matrices についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by