我想重复一个向量的元素,但要考虑元素块(不使用任何循环)。
例如,考虑到大小为2的块,我有一个像a = [1:6]
这样的向量,我希望输出看起来像这个out = [1 2 1 2 3 4 3 4 5 6 5 6]
。
答案 0 :(得分: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, []);
然后我们想在第二维上重复A
blksize
次,以创建必要数量的重复。
B = repmat(A, 1, blksize, 1);
然后我们将整个事物扁平化为数组,并且由于列主要排序,我们得到了所需的输出
output = B(:).'
可选的One-Liner
如果您真的想要一行,则可以再次使用reshape
而不是(:).'
output = reshape(repmat(reshape(a, blksize, 1, []), 1, blksize, 1), 1, []);
<强>替代强>
您也可以使用MATLAB&#39; repelem
完成重复
result = reshape(repelem(reshape(a, blksize, 1, []), 1, blksize, 1), 1, [])