Create a matrix from a row vector according to specifications

1 view (last 30 days)
I am working in matlab. I have a row vector in and a scalar number fuzzy_no. I want to create a matrix output of size fuzzy_no times (numel(in)-fuzzy_no). such that the ith col of the matrix output has the elements from i:i+fuzzy_no-1 of row vector in.
In other words I want to implement the following loop without using loops
n = numel(in);
output = zeros(fuzzy_no,n-fuzzy_no);
for i = 1:size(output,2)
output(:,i) = in(1,i:i+fuzzy_no-1);
end

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 30 May 2014
Edited: Andrei Bobrov on 30 May 2014
output = hankel(in(1:n-fuzzy_no),in(n-fuzzy_no:end-1))';
or
output = in(bsxfun(@plus,1:n-fuzzy_no,(0:fuzzy_no-1)'));
  1 Comment
Nishant
Nishant on 30 May 2014
Thanks, I needed the last element to be missing so this worked fine (without the transpose),
output = hankel(in(1:n-fuzzy_no),in(n-fuzzy_no:end-1));

Sign in to comment.

More Answers (0)

Categories

Find more on Loops and Conditional Statements in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!