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, [])
我想重复向量的元素,但考虑元素块(不使用任何循环)。
例如,考虑一个大小为 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, [])