本问题已经有最佳答案,请猛点这里访问。
我有一个向量,例如
vector = [1 2 3]
我想在自身内部重复n次,即如果n = 3,则最终结果为:
vector = [1 2 3 1 2 3 1 2 3]
对于任何n值,如何实现呢? 我知道我可以执行以下操作:
newvector = vector;
for i = 1 : n-1
newvector = [newvector vector];
end
不过,这似乎有点麻烦。 还有更有效的方法吗?
尝试
repmat([1 2 3],1,3)
我将让您检查repmat的文档。
这是比repmat或reshape快一个数量级的方法
进行此类操作的最佳方法之一是使用Tony's Trick。通常发现Repmat和Reshape比Tony的技巧要慢,因为它直接使用Matlabs固有的索引。为了回答您的问题,
假设您要像r=[1 2 3 1 2 3 1 2 3...]那样平铺行向量r=[1 2 3] N的时间,然后,
c=r'
cc=c(:,ones(N,1));
r_tiled = cc(:)';
对于大型N,此方法与reshape或repmat相比可节省大量时间。
编辑:回复@ Li-aung Yip的疑问
我进行了一个小型的Matlab测试,以检查repmat和tony's trick之间的速度差异