Matlab:向量中重复的元素块

时间:2017-04-19 15:59:43

标签: matlab vector duplicates repeat

我想重复一个向量的元素,但要考虑元素块(不使用任何循环)。

例如,考虑到大小为2的块,我有一个像a = [1:6]这样的向量,我希望输出看起来像这个out = [1 2 1 2 3 4 3 4 5 6 5 6]

1 个答案:

答案 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, [])