Avoid for loop?

1 view (last 30 days)
grega
grega on 19 Dec 2018
Answered: Stephen23 on 19 Dec 2018
I want to generate arbitrary matrix of indeces, e.g.:
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
One can observe a series in it. I solved the problem as follows:
% --- Inputs
x = 1:9;
window = 4;
% --- creating the matrix
mm = length(x);
nb_rws = mm - window + 1;
y = ones(nb_rws,window);
for i = 1 : nb_rws
y(i,:) = x(i : i + window -1);
end
y
Is there a solution to avoid the for loop? Thanks..

Accepted Answer

madhan ravi
madhan ravi on 19 Dec 2018
Edited: madhan ravi on 19 Dec 2018
y=hankel((1:4),(4:9))'
Gives:
y =
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9

More Answers (1)

Stephen23
Stephen23 on 19 Dec 2018
Simpler:
>> hankel(1:6,6:9)
ans =
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9

Categories

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

Products


Release

R2015b

Community Treasure Hunt

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

Start Hunting!