MATLAB Answers

Finding maximum value and it's location from the matrix

2.086 views (last 30 days)
Kantosa
Kantosa on 7 Dec 2013
Commented: li weilin on 2 Mar 2020
Hi,
This is the matrix I obtained
K =
8 16 -16 -8 -16 16 -20 -40 40
18 2 -6 -18 -2 6 -45 -5 15
12 20 20 -12 -20 -20 -30 -50 -50
-4 -8 8 4 8 -8 0 0 0
-9 -1 3 9 1 -3 0 0 0
-6 -10 -10 6 10 10 0 0 0
-16 -32 32 -8 -16 16 0 0 0
-36 -4 12 -18 -2 6 0 0 0
-24 -40 -40 -12 -20 -20 0 0 0
The question asked me to find the maximum number and it's location using the max function. I did this by using this code:
max_num=max(K(:))
[X Y]=ind2sub(size(K),max_num)
From the code, I got the maximum value off from the matrix, however the location is not right.
max_num =
40
X =
4
Y =
5
The X and Y should have display X = 9 , Y = 1 , instead it displays X = 4 , Y = 5. I don't know what is wrong with my code. It would be great if anyone can help me with this.
Thank you in advance.

  0 Comments

Sign in to comment.

Accepted Answer

the cyclist
the cyclist on 7 Dec 2013
You are very close.
Big hints:
In your first line of code,
>> max_num=max(K(:));
you are finding the value , but not the index , of the maximum. If you call max() with two output arguments, then you will also get the index.
>> [max_num,max_idx] = max(K(:));
In your second line of code,
>> [X Y]=ind2sub(size(K),max_num);
you are using a function that converts a linear index to (x,y) coordinates. But you have not put the index into that function; you have put the value into that function.
I think that should get you there.

  0 Comments

Sign in to comment.

More Answers (3)

sixwwwwww
sixwwwwww on 7 Dec 2013
Edited: sixwwwwww on 7 Dec 2013
try this:
[row, col] = find(ismember(K, max(K(:))))

  2 Comments

Sign in to comment.


Kan-Hua
Kan-Hua on 7 Dec 2013
Edited: Kan-Hua on 7 Dec 2013
I think that's what you need:
[max_num, max_idx]=max(K(:));
[X,Y]=ind2sub(size(K),max_idx);
you need the input parameter of ind2sub to be an index rather than maximum value.
Alternatively, you can do this:
[max_num, max_idx]=max(K(:));
[X,Y]=ind2sub(size(K),find(K==max_num));

  0 Comments

Sign in to comment.


GS76
GS76 on 26 Sep 2019
Thank you Kan-Hua,
This was exactly what I needed to solve my problem, much appreciated.

  0 Comments

Sign in to comment.

Sign in to answer this question.

Tags


Translated by