Find max values of n previous values in a matrix without a loop.
Mostrar comentarios más antiguos
Hello,
I have a single column matrix and need to add a second column containing on each row the highest value of n previous row.
For example, my matrix would have this column:
Column1
1
4
3
6
3
5
4
7
2
5
6
1
I am looking to add a column containing the high value of 3 previous rows (including the current row) in the first column, so that I would obtain:
Column1 Column2
1 NaN
4 NaN
3 4
6 6
3 6
5 6
4 5
7 7
2 7
5 7
6 6
1 6
Is it possible in Matlab without a for to loop?
Many thanks,
Libor
Respuesta aceptada
Más respuestas (2)
The simplest solution is to download Jos's excellent FEX submission slidefun, which works for all MATLAB versions (movmax was introduced in R2016a):
V = [1;4;3;6;3;5;4;7;2;5;6;1];
N = 3; % window size
W = slidefun(@max,N,V,'backward');
W(1:N-1) = NaN;
And checking the answer:
>> [V,W]
ans =
1 NaN
4 NaN
3 4
6 6
3 6
5 6
4 5
7 7
2 7
5 7
6 6
1 6
1 comentario
Libor Cerny
el 3 de En. de 2017
v = [1 4 3 6 3 5 4 7 2 5 6 1].';
n = 3;
[v, [nan(n-1, 1); movmax(v, n, 'EndPoints', 'discard')]]
edit: which I see was already suggested by Torsten in the hidden comments
1 comentario
Libor Cerny
el 3 de En. de 2017
Categorías
Más información sobre Matrix Indexing en Centro de ayuda y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!