2017-04-19 207 views
0

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

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

+0

对于一个大小为3块什么是预期的输出? – rahnema1

+0

'out = [1 2 3 1 2 3 4 5 6 4 5 6]'。 – f380cedric

+0

而对于大小为5的区块? – rahnema1

回答

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

然后,我们想重复Ablksize倍沿第二维度来建立重复的必要数量。

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