2011-10-05 50 views
4

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

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 

回答

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),其返回I=2,J=2,请参阅here

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

I = find(A==min(A(:)); 

I现在是所有的人的一个载体。

+0

它并不像我希望真的精确!如果我写[B,I] = min(min(A)),我会得到它的最小值作为“B”和它的行位置(“I”),但是我不知道它属于哪一列。 :( – kojikurac

+0

@kojikurac:对不起,我的代码有一个bug - 我现在修复了它,不要用min(min(A)),而用min(A(:))来代替 –

+0

好吧,这样好多了,我仍然只有一个问题,如果我有两个或更多的相同的数字,它总是只会选择第一个。是否有任何方式使它们全部出现? – kojikurac

3

对于需要,因为它们操作列方向,即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 

注意的相应列的最大元素运行MINMAX功能两次矩阵这只适用于矩阵。更高维数组需要多次运行MIN和MAX,因为您可以使用NDIMS获得的维数。

+4

代替'min(min(A))',你可以使用'min(A(:))',无论“A”有多少个维数,它都可以工作 –

+0

@JonasHeidelberg - 是的!太棒了!谢谢你......忘了A(:)序列化数组。 –

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) 
相关问题