Find max values of n previous values in a matrix without a loop.

1 visualizzazione (ultimi 30 giorni)
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

Risposta accettata

José-Luis
José-Luis il 3 Gen 2017
a = randi(10,10,1);
your_result = max([a, circshift(a,1), circshift(a,2)],[],2);
your_result(1:2) = NaN;
  8 Commenti
Libor Cerny
Libor Cerny il 3 Gen 2017
Thank you again, Jose-Luis! I really appreciate your help!
José-Luis
José-Luis il 3 Gen 2017
Modificato: José-Luis il 3 Gen 2017
My pleasure. I had no idea something like movmax() existed, and it is indeed a better answer.
It was fun coming up with this anyway.

Accedi per commentare.

Più risposte (2)

Stephen23
Stephen23 il 3 Gen 2017
Modificato: Stephen23 il 4 Gen 2017
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 Commento
Libor Cerny
Libor Cerny il 3 Gen 2017
Thank you very much Stephen, this also does exactly what I need, although as per Torsten's comment above, there are apparently built-in and optimized functions in Matlab now. Thanks again!

Accedi per commentare.


Guillaume
Guillaume il 3 Gen 2017
Modificato: Guillaume il 3 Gen 2017
Actually, the simplest solution is to use movmax (since R2016a):
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 Commento
Libor Cerny
Libor Cerny il 3 Gen 2017
Yes. :)
But thank you anyhow, Guillaume! I really appreciate all help. Et... Bonne annee! ;)

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by