Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Replicate vector and shift each copy by 1 row down without for-loop

I would like replicate a vector N times to create a matrix with each copy shifted 1 row down. See image (first column is the vector 1 to 5). It would be great if this can be achieved without using for loop.

enter image description here

So far was able to to do this repmat(my_vector, 1, 5) to create an N x 5 matrix.

like image 835
cloudviz Avatar asked Jun 22 '26 22:06

cloudviz


1 Answers

You can do it with toeplitz and tril;

a = [1 2 3 4 5]
out = tril( toeplitz(a) )

or

out = toeplitz(a, a*0)
%// out = toeplitz(a, zeros(size(a)) )  %// for large arrays

or if you don't mind some happy flipping:

out = flipud( hankel( flipud(a(:)) ) )
like image 175
Robert Seifert Avatar answered Jun 25 '26 21:06

Robert Seifert