2017-04-19 84 views
0

我想重複一個向量的元素,但考慮元素塊(不使用任何循環)。Matlab:向量中重複的元素塊

例如,考慮一個大小爲2的塊,我有一個這樣的矢量a = [1:6],我希望輸出看起來像這樣out = [1 2 1 2 3 4 3 4 5 6 5 6]

+0

對於一個大小爲3塊什麼是預期的輸出? – rahnema1

+0

'out = [1 2 3 1 2 3 4 5 6 4 5 6]'。 – f380cedric

+0

而對於大小爲5的區塊? – rahnema1

回答

2

您可以reshape您的輸入,然後重複它與使用repmat

blksize = 2; 

tmp = repmat(reshape(a, blksize, 1, []), 1, blksize, 1); 

output = tmp(:).'; 

說明

首先,我們希望您的基質重塑成一個blksize x 1 x (numel(a)/blksize)矩陣需要。

A = reshape(a, blksize, 1, []); 

然後,我們想重複Ablksize倍沿第二維度來建立重複的必要數量。

B = repmat(A, 1, blksize, 1); 

我們再壓平了整個事情到一個數組,並感謝列爲主排序,我們得到所需的輸出

output = B(:).' 

可選的一行

如果你真的想一行可以再次使用reshape而不是(:).'

output = reshape(repmat(reshape(a, blksize, 1, []), 1, blksize, 1), 1, []); 

替代

你也可以使用MATLAB的repelem來完成重複

result = reshape(repelem(reshape(a, blksize, 1, []), 1, blksize, 1), 1, []) 
相關問題