0
我想重複一個向量的元素,但考慮元素塊(不使用任何循環)。Matlab:向量中重複的元素塊
例如,考慮一個大小爲2的塊,我有一個這樣的矢量a = [1:6]
,我希望輸出看起來像這樣out = [1 2 1 2 3 4 3 4 5 6 5 6]
。
我想重複一個向量的元素,但考慮元素塊(不使用任何循環)。Matlab:向量中重複的元素塊
例如,考慮一個大小爲2的塊,我有一個這樣的矢量a = [1:6]
,我希望輸出看起來像這樣out = [1 2 1 2 3 4 3 4 5 6 5 6]
。
您可以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, []);
然後,我們想重複A
blksize
倍沿第二維度來建立重複的必要數量。
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, [])
對於一個大小爲3塊什麼是預期的輸出? – rahnema1
'out = [1 2 3 1 2 3 4 5 6 4 5 6]'。 – f380cedric
而對於大小爲5的區塊? – rahnema1