MATLAB Answers

Finding maximums in matrix columns

5 views (last 30 days)
Christopher
Christopher on 16 Nov 2013
Commented: Azzi Abdelmalek on 16 Nov 2013
Hello all,
I have a little bit of a tricky problem that I am trying to solve. I am still rather new to Matlab, so I am a little bit stuck on how to approach this problem. I will try to explain with a simple example. I have a matrix and I am trying to find the maximums of the 2nd and 3rd columns between every two values of the last column. Here is an example:
Matrix=[1 2;2 2;1 2;3 3;2 3;2 3;2 4;3 4;4 4]
I then want to find the maximums for column 1 for every i and i+1, based off the last column. So the first maximum would be found for 2:3 of the last column, which would be the first 6 rows. The first maximum would then be 3.
The next maximum would then be between 3:4 based off the values in the last column. The maximum would then be 4. I would also like to find the indices of these maximums that way I can pull the location of the maximum values.
I hope this makes sense, it's rather hard to explain.

Answers (2)

Azzi Abdelmalek
Azzi Abdelmalek on 16 Nov 2013
Edited: Azzi Abdelmalek on 16 Nov 2013
Edit
n=2; % first column
m=7 % last column
c1=Matrix(:,n);
c2=Matrix(:,m);
k=1;
max_val=[];
idx_val=[];
index=[];
while k<numel(c2)
idx=find(c2==c2(k) | c2==c2(k)+1);
index{end+1}=idx;
a1=c1(idx);
[ii,jj]=max(a1);
max_val(end+1)=ii;
idx_val(end+1)=jj+k-1;
k=k+numel(idx);
end
disp(max_val)
disp(idx_val)
  2 Comments

Sign in to comment.


Roger Stafford
Roger Stafford on 16 Nov 2013
Edited: Roger Stafford on 16 Nov 2013
Here's another way. Let A be your two-columned array. (Corrected)
f = find([true;diff(A(:,2))~=0;true]);
n = length(f)-2;
if n > 0
M = zeros(n,1);
I = zeros(n,1);
for k = 1:n
[mx,ix] = max(A(f(k):f(k+2)-1,1));
M(k) = mx;
I(k) = ix;
end
else
[M,I] = max(A(:,1));
end
M is a column vector of the maximum values and I their corresponding indices in A.

Community Treasure Hunt

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

Start Hunting!