Matlab:向量中重复的元素块

Matlab: duplicate blocks of elements in a vector

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

例如,考虑一个大小为 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, [])