在matlab中,如何生成这样的矢量:
[1,1,1,...,1,1, 2,2,2,...,2,2, 3,3,3,...,3,3, 4,4,4,...,4,4]
答案 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