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