我想重复向量的元素,但考虑元素块(不使用任何循环)。
例如,考虑一个大小为 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, []);
选择
您还可以使用 MATLABrepelem
来完成重复
result = reshape(repelem(reshape(a, blksize, 1, []), 1, blksize, 1), 1, [])
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句