我的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}}是可变的。
答案 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)