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

2 Ansichten (letzte 30 Tage)
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

Akzeptierte Antwort

José-Luis
José-Luis am 3 Jan. 2017
a = randi(10,10,1);
your_result = max([a, circshift(a,1), circshift(a,2)],[],2);
your_result(1:2) = NaN;
  8 Kommentare
Libor Cerny
Libor Cerny am 3 Jan. 2017
Thank you again, Jose-Luis! I really appreciate your help!
José-Luis
José-Luis am 3 Jan. 2017
Bearbeitet: José-Luis am 3 Jan. 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.

Melden Sie sich an, um zu kommentieren.

Weitere Antworten (2)

Stephen23
Stephen23 am 3 Jan. 2017
Bearbeitet: Stephen23 am 4 Jan. 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 Kommentar
Libor Cerny
Libor Cerny am 3 Jan. 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!

Melden Sie sich an, um zu kommentieren.


Guillaume
Guillaume am 3 Jan. 2017
Bearbeitet: Guillaume am 3 Jan. 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 Kommentar
Libor Cerny
Libor Cerny am 3 Jan. 2017
Yes. :)
But thank you anyhow, Guillaume! I really appreciate all help. Et... Bonne annee! ;)

Melden Sie sich an, um zu kommentieren.

Community Treasure Hunt

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

Start Hunting!

Translated by