登录论坛

查看完整版本 : [MATLAB基础] 新人提问:如何实现求一个矩阵中N个最大值及下标的函数


hipichu777
2011-12-20, 23:44
大家好,我是matlab初学者,从c转行而来.

我想实现这样一个函数
function [output] = find_max_position(input,max_amount)
功能为输出一个max_amount行两列的矩阵,每一列分别是input(300x300)矩阵中最大的max_amount个值的行号与列号

注:input矩阵中有重复数据,

如input(300x300)=
9 8 7 ...
9 8 7...
9 8 7...
.........
其余都未零,则输出最大5个数的行号与列号为
1 1
2 1
3 1
1 2
2 2

我之前尝试了很多sort()和find()的算法,效果都不好,希望各位帮助.先谢了!

hipichu777
2011-12-21, 10:15
大家看一下这样写有问题么?

function [output] = find_max_position(input,max_amount)

output=zeros(max_amount,1);
input=abs(input);

max_value=max(max(input));

sorted=sort(input,1,'descend');

i=0;
for j=1:300
for k=1:300
if input(j,k)>=sorted(max_amount) && i<max_amount
i = i + 1;
output(i)=j+300*k;
end
end
end

end

yhcode
2011-12-23, 09:38
for k=1:300
[row(k).vlu col(k).vlu] = find(input(:,1) == max(input,[],1));
end