-2

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

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

3 回答 3

5

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

ceil((1:24)/6)

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

当然,它可以很容易地概括:

N = 4;
M = 6;
ceil((1:M*N)/M)
于 2013-10-23T14:05:22.657 回答
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 的答案可能更快,这可能是最快的。

于 2013-10-23T13:47:44.730 回答
4
kron(1:4, ones(1,6))

我认为使用 kronecker 产品可能会更快,但也可能不会。在 Matlab 中查看与 R 的代表类似的功能

于 2013-10-23T13:53:27.833 回答