我不想重复每一行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
,扩大:
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), :);
这是有点难以阅读,所以包括一个注释行描述它在你使用这个时做了什么。
而且看看克罗内克产品:
A = kron(A, [1;1;1]);
它有时可以是非常有用的。
我认为你的意思是在第二行Rody中加入一个'A =':-) –
@ColinTBowers:yup,编辑。Tnx –
罗迪已为您提供的解决方案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
,这会使我们回到原来的减速源。其他人可能会想出一个聪明的方法来构建所需的索引向量。
编辑:罗迪已经更新了他的答案,提供了上述“聪明的方式”。 :-)
+1乘以1是一个很好的替代'repmat',但是,它只适用于向量'A' –
好主意,但我用它在我的答案:) –
@RodyOldenhuis没有probs :-)实际上我很感激,因为我不知道可以用这种方式使用线性索引。 –
您可以重复要重复的行的索引。 – Maroun
这不是一个包含脸书的问题,请使用正确的标签 – luschn
为什么人们对此表示不满?你至少应该发表评论,说出你为什么倒计时! – Vivi