登录论坛

查看完整版本 : [MATLAB基础] 如何求一个矩阵中最大的10个元素值及其坐标?


angie
2009-04-24, 17:50
:confused:有一个矩阵X(m,n),
想找到里面最大的元素值及坐标,
并要求X保持不变.
如何实现?:confused:
谢谢

mathjiang
2009-04-24, 18:31
[m,n]=size(X);
v=sort(reshape(1,m*n),'descend');
v=v(1:10);%X中前十个最大的.
idx=[];
for i=1:10
idx=[idx; find(X==v(i))];
end
%idx就是X中前十个最大值的位置(依次的).

mathjiang
2009-04-24, 18:39
或者:
[m,n]=size(X);
v=sort(reshape(1,m*n),'descend');
v=v(1:10);%X中前十个最大的.
[tf idx]=ismember(X,v)
%idx就是X中前十个最大值的位置(依次的).

angie
2009-04-25, 11:10
:(试了一下, 好像不行,原因如下:
1. reshape 好像不能用reshape(X,m*n),只能用(X,m,n),这样就只能对列sort,因此结果是从前面列往后取,没有遍及整个矩阵X:(
2.位置没有按矩阵中的行列坐标给出(因为实际的矩阵比较大,要求知道相应坐标的信息),只给出在矩阵中的顺序位置,只有一个值:(

我把程序贴出来,请大家帮我看看:
function sort_a_matrix
clear
clc
X=rand(4,5)
[m,n]=size(X);
max_number=10;
max_value=sort(reshape(X,m,n),'descend')
max_value=max_value(1:max_number)
% max_site=[];
% for i=1:max_number
% max_site=[max_site;find(X==max_value(i))];
% end
[tf max_site]=ismember(X,max_value)
max_value;
max_site

angie
2009-04-25, 11:59
ok啦:)
function sort_a_matrix
clear
clc
X=rand(4,5)
[m,n]=size(X);
max_number=10;
max_value=sort(reshape(X,1,m*n),'descend')
max_value=max_value(1:max_number)
% max_site(m,n)=zeros
for i=1:max_number
[r(i),c(i)]=find(X==max_value(i));
end