我不想重複每一行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