Finding maximum value and it's location from the matrix

710 vues (au cours des 30 derniers jours)
Kantosa
Kantosa le 7 Déc 2013
Déplacé(e) : Dyuman Joshi le 13 Nov 2023
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.

Réponse acceptée

sixwwwwww
sixwwwwww le 7 Déc 2013
Modifié(e) : Image Analyst le 19 Oct 2021
Try this:
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 40 0
-16 -32 32 -8 -16 16 0 40 0
-36 -4 12 -18 -2 6 0 0 0
-24 -40 -40 -12 -20 -20 0 0 0]
K = 9×9
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 40 0 -16 -32 32 -8 -16 16 0 40 0 -36 -4 12 -18 -2 6 0 0 0 -24 -40 -40 -12 -20 -20 0 0 0
[row, col] = find(ismember(K, max(K(:))))
row = 3×1
6 7 1
col = 3×1
8 8 9
  3 commentaires
li weilin
li weilin le 2 Mar 2020
Thank you. This is the right answer!
NAGENDRA KUMAR
NAGENDRA KUMAR le 18 Juin 2021
Thank You so much , It works

Connectez-vous pour commenter.

Plus de réponses (3)

the cyclist
the cyclist le 7 Déc 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.

Kan-Hua
Kan-Hua le 7 Déc 2013
Modifié(e) : Kan-Hua le 7 Déc 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));
  1 commentaire
GS76
GS76 le 26 Sep 2019
Déplacé(e) : Dyuman Joshi le 13 Nov 2023
Thank you Kan-Hua,
This was exactly what I needed to solve my problem, much appreciated.

Connectez-vous pour commenter.


Stylianos Assimonis
Stylianos Assimonis le 19 Oct 2021
Modifié(e) : Stylianos Assimonis le 19 Oct 2021
[t1,u1]=max(K);
[t2,u2]=max(t1);
Maximum lies at [u1(u2),u2], i.e.,
K_max = K(u1(u2),u2).

Catégories

En savoir plus sur Matrix Indexing dans Help Center et File Exchange

Tags

Community Treasure Hunt

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

Start Hunting!

Translated by