找到矩阵中的最高/最低值

时间:2011-10-05 19:59:29

标签: matlab

非常基本的问题:如何在随机矩阵中找到最高或最低值。 我知道有可能说:

a = find(A>0.5)

但我正在寻找的更像是这样:

A = rand(5,5)
A = 
0.9388    0.9498    0.6059    0.7447    0.2835
0.6338    0.0104    0.5179    0.8738    0.0586
0.9297    0.1678    0.9429    0.9641    0.8210
0.0629    0.7553    0.7412    0.9819    0.1795
0.3069    0.8338    0.7011    0.9186    0.0349

% find highest (or lowest) value

ans = A(19)%for the highest or A(7) %for the lowest value in this case

3 个答案:

答案 0 :(得分:16)

查看min()max()函数。它们可以返回最高/最低值及其索引:

[B,I]=min(A(:)); %# note I fixed a bug on this line!

返回I=7B=A(7)=A(2,2)。表达式A(:)告诉MATLAB暂时将A视为一维数组,因此即使A为5x5,它也会返回线性索引7.

如果你需要2D坐标,即B=A(7)=A(2,2)中的“2,2”,你可以使用返回[I,J] = ind2sub(size(A),I)的{​​{1}},参见here

更新
如果您需要所有条目的指数达到最小值,您可以使用find

I=2,J=2

I = find(A==min(A(:)); 现在是所有这些的载体。

答案 1 :(得分:3)

对于矩阵,您需要运行MINMAX函数两次,因为它们按列操作,即max(A)返回一个向量,其中每个元素都是相应列中的最大元素A。

>> A = rand(4)

A =

         0.421761282626275         0.655740699156587         0.678735154857773         0.655477890177557
         0.915735525189067        0.0357116785741896         0.757740130578333         0.171186687811562
         0.792207329559554         0.849129305868777         0.743132468124916         0.706046088019609
         0.959492426392903         0.933993247757551         0.392227019534168        0.0318328463774207

>> max(max(A))

ans =

         0.959492426392903

>> min(min(A))

ans =

        0.0318328463774207

请注意,这仅适用于矩阵。高维数组需要运行MIN和MAX的次数与使用NDIMS时可以获得的维数一样多。

答案 2 :(得分:0)

试试这个

A=magic(5)
[x,y]=find(A==max(max(A))) %index maximum of the matrix A 
A_max=A(x,y)
[x1,y1]=find(A==min(max(A))) %index minimum of the matrix A 
A_min=A(x1,y1)