matlab如何生成具有重复增加数的向量

时间:2013-10-23 13:46:15

标签: matlab matrix

在matlab中,如何生成这样的矢量:

[1,1,1,...,1,1, 2,2,2,...,2,2, 3,3,3,...,3,3, 4,4,4,...,4,4]

3 个答案:

答案 0 :(得分:5)

鉴于矢量的简单结构,可以使用一种非常简单的解决方案:

ceil((1:24)/6)

对于小型载体来说非常快,而对于大型载体则具有竞争力。当向量变得非常大时,reshape替代方案具有更好的速度。

当然可以很容易地概括:

N = 4;
M = 6;
ceil((1:M*N)/M)

答案 1 :(得分:4)

您可以使用:

N = 4;
M = 6;
result = reshape(repmat(1:N,M,1),1,[])

这可以通过生成[1,2,3,...,N],然后复制到M行(repmat),然后按列(reshape)进行阅读来实现。

通常更快的替代方法是用矩阵乘积替换repmat,用线性索引替换reshape(感谢@Dan和@Floris):

result = ones(M,1)*(1:N);
result = result(:).'

另见@ Dan的答案,根据版本/机器可能会更快,或@ Dennis's,这可能是最快的。

答案 2 :(得分:4)

kron(1:4, ones(1,6))

我认为使用kronecker产品可能会更快,但也可能不会。见A similar function to R's rep in Matlab