93
votes

Is there a way to extend a vector by making it repeat itself?

>v = [1 2];
>v10 = v x 5; %x represents some function. Something like "1 2" x 5 in perl

Then v10 would be:

>v10
     1 2 1 2 1 2 1 2 1 2

This should work for the general case, not just for [1 2]

2
You can use kron - The Kroencker product operator. e.g. v=[1 2] and v100=kron(ones(1,100),v) is the vector v100=[v v ... v] (100 times). If you want to concatenate some column-vector y with itself K times, use yK=kron(ones(K,1),y).Pantelis Sopasakis

2 Answers

141
votes

The function you're looking for is repmat().

v10 = repmat(v, 1, 5)
6
votes

Obviously repmat is the way to go if you know in which direction you want to expand the vector.

However, if you want a general solution that always repeats the vector in the longest direction, this combination of repmat and indexing should do the trick:

 v10=v(repmat(1:length(v),1,5))