5 views (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.

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)

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.

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

Start Hunting!