在matlab中,如何生成这样的向量:
[1,1,1,...,1,1, 2,2,2,...,2,2, 3,3,3,...,3,3, 4,4,4,...,4,4]
鉴于向量的简单结构,可以使用一个非常简单的解决方案:
ceil((1:24)/6)
对于小向量非常快,对于大向量具有竞争力。当向量变得非常大时,reshape
替代方案具有更好的速度。
当然,它可以很容易地概括:
N = 4;
M = 6;
ceil((1:M*N)/M)
您可以使用:
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 的答案可能更快,这可能是最快的。
kron(1:4, ones(1,6))
我认为使用 kronecker 产品可能会更快,但也可能不会。在 Matlab 中查看与 R 的代表类似的功能