MATLAB Answers

Extracting and sorting data in a column

4 views (last 30 days)
Olu B
Olu B on 8 Aug 2019
Edited: madhan ravi on 8 Aug 2019
Hi For example I have a 19 x1 colunmn called Mx and I need to find the maximum value in every 2 rows till the end of the column.
Mx
20
22
23
21
34
54
23
14
67
56
34
32
21
12
43
23
56
34
32

  2 Comments

Alex Mcaulley
Alex Mcaulley on 8 Aug 2019
Can you show the expected result in your example?
Olu B
Olu B on 8 Aug 2019
The expected result would be
NewMx = [22 23 54 23 67 34 21 43 56 32]
Cheers

Sign in to comment.

Answers (2)

madhan ravi
madhan ravi on 8 Aug 2019
Edited: madhan ravi on 8 Aug 2019
Works for odd as well as even number of elements:
NewMx = max(reshape([Mx(:);...
-Inf(mod(numel(Mx),2))],2,[])) % thank you Guillaume

  7 Comments

Show 4 older comments
Guillaume
Guillaume on 8 Aug 2019
By the way, the mod expression should be:
mod(-numel(Mx), groupsize) %note the -
When groupsize is 2, - or + give the same result. For larger groupsize it's critical.
But the idea is there, when you want to group consecutive elements of a vector, the solution is to reshape the vector so that each group is row/column.The idea extends to higher dimensions as well. If you want to calculate something for every 3 consecutive columns of a matrix, reshape the matrix to 3D to have 3 columns and ncolumns/3 pages.

Sign in to comment.


Jos (10584)
Jos (10584) on 8 Aug 2019
This works for both an even or an odd number of elements:
N = 11 ; % odd
Mx = randi(10, N, 1)
M2 = accumarray(ceil((1:numel(Mx))/2).', Mx, [], @max)

  0 Comments

Sign in to comment.

Sign in to answer this question.