Finding maximums in matrix columns
1 view (last 30 days)
Show older comments
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.
0 Comments
Answers (2)
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
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.
0 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Products
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!