重复矩阵的每一行

时间:2015-04-13 09:55:57

标签: matlab

我的A变量m大小为n B。我希望按m生成m*n大小A = [1 2 3; 4 5 6; 7 8 9] ,例如以下示例。 例如:

B = [1 2 3 4 5 6 7 8 9;
     1 2 3 4 5 6 7 8 9;
     1 2 3 4 5 6 7 8 9]

应该以

结果
m

没有使用循环有没有办法做到这一点? n和{{1}}是可变的。

5 个答案:

答案 0 :(得分:6)

您应该使用repmat Matlab功能:

B = repmat(A,M,N)创建一个由M - by - N组成的大型矩阵B.     平铺A的副本。 B的尺寸为[size(A,1)*M, size(A,2)*N]。     声明repmat(A,N)创建了N - by - N平铺。

对于您的具体情况,一个解决方案可能是:

A=A';
B=repmat(A(:)',3,1);

对于一般情况,一种解决方案可能是:

A_aux=reshape(A',1,size(A,1)*size(A,2));
B=repmat(A_aux,size(A,1),1); 

答案 1 :(得分:4)

正如@Nerea所提到的,Repmat确实是走到这里的方式。这个解决方案应该给出与他相同的答案,但我个人认为它更优雅:

B=repmat(reshape(A',1,[]),size(A,1),1);

答案 2 :(得分:4)

要包含一个非常快速的bsxfun解决方案:

A = [1  2  3  4;
     5  6  7  8;
     9 10 11 12]

A = A.' %'
B = bsxfun(@plus,zeros(size(A,2),1),A(:).')

或使用kron,但肯定会慢一些:

A = A.'
B = kron(A(:),ones(1,size(A,2))).'

B =

     1     2     3     4     5     6     7     8     9    10    11    12
     1     2     3     4     5     6     7     8     9    10    11    12
     1     2     3     4     5     6     7     8     9    10    11    12

答案 3 :(得分:3)

repmat s

[m n] = size(A);
B = ones(m,1) * reshape( A.', 1, [] );

答案 4 :(得分:0)

一种方法 使用repmatreshapepermute组合!

out = repmat(reshape(permute(A,[3 2 1]),1,[]),size(A,1),1,1);

另一种方法没有reshape但是变成了2个班次

out1 = permute(A,[3 2 1]);
out = repmat(out1(:).',size(A,1),1,1);