我想将每一行重复 n 次,例如:
A= [123
456
789];
所以我想要:
b=[123
123
123
456
456
456
789
789
789];
我试过了repmat
:
B = repmat(A,3,1)
但这不会导致b
上述情况......我该怎么做?
我想将每一行重复 n 次,例如:
A= [123
456
789];
所以我想要:
b=[123
123
123
456
456
456
789
789
789];
我试过了repmat
:
B = repmat(A,3,1)
但这不会导致b
上述情况......我该怎么做?
罗迪为您提供了repmat
解决方案(+1),但我认为还值得指出的是:
A = [123;456;789];
A = ones(N, 1) * A';
A = A(:);
将快接近一个数量级,因为repmat
这不是一个特别有效的功能。超过 10000 次迭代的快速速度测试产生:
Elapsed time is 0.206894 seconds %#repmat solution
Elapsed time is 0.024718 seconds %#My solution
最后一点,我在@Maroun85 建议使用线性索引的评论中注意到。但是,如果不调用 ,我看不到构造所需索引的聪明方法repmat
,这使我们回到了减速的原始根源。不过,其他人可能会想出一个聪明的方法来构造所需的索引向量。
编辑:罗迪更新了他的答案以提供上述“聪明的方式”。:-)
对于向量,只需repmat
在转置上使用,然后展开:
A = [123;456;789];
A = repmat(A.', 3, 1);
A = A(:);
更一般地,对于任何矩阵/张量,repmat
在索引上使用:
A = [ 1 2 3; 4 5 6; 7 8 9 ];
A = A(repmat(1:end, 3, 1), :);
或者,根据下面 Colin T Bowers 的回答,一个更快的替代方案是
A = A( ones(3,1) * (1:end), :);
这有点难读,所以包括一个注释行来描述你使用它时它的作用。
还可以看看 Kronecker 产品:
A = kron(A, [1;1;1]);
这有时非常有用。