0
我想重复一个向量的元素,但考虑元素块(不使用任何循环)。Matlab:向量中重复的元素块
例如,考虑一个大小为2的块,我有一个这样的矢量a = [1:6]
,我希望输出看起来像这样out = [1 2 1 2 3 4 3 4 5 6 5 6]
。
我想重复一个向量的元素,但考虑元素块(不使用任何循环)。Matlab:向量中重复的元素块
例如,考虑一个大小为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, [])
对于一个大小为3块什么是预期的输出? – rahnema1
'out = [1 2 3 1 2 3 4 5 6 4 5 6]'。 – f380cedric
而对于大小为5的区块? – rahnema1