返回   MATLAB中国论坛|MATLAB爱好者之家—不仅仅是MATLAB! > 特色讨论区:工程数学软件-不仅仅是MATLAB! > MATLAB论坛


MATLAB论坛 一切MATLAB相关问题在此讨论,发帖时必须选择相应主题前缀:MATLAB基础,MATLAB混合编程,MATLAB数学问题,MATLAB工具箱,MATLAB图像处理,MATLAB GUI,MATLAB毕业设计,Simulink相关等。

挖掘已有资源,发帖前请先搜索!
虚拟主机 域名注册 香港空间
回复
 
LinkBack 主题工具 显示模式
旧 2011-12-20, 11:44 PM   #1
初级会员
 
注册日期: 2011-12-20
帖子: 2
感谢他人: 0
有 0 帖获得 0 感谢
声望力: 0
hipichu777 正向着好的方向发展
默认 新人提问:如何实现求一个矩阵中N个最大值及下标的函数

大家好,我是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 AM   #2
初级会员
 
注册日期: 2011-12-20
帖子: 2
感谢他人: 0
有 0 帖获得 0 感谢
声望力: 0
hipichu777 正向着好的方向发展
默认 回复: 新人提问:如何实现求一个矩阵中N个最大值及下标的函数

大家看一下这样写有问题么?

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

此帖于 2011-12-21 10:27 AM 被 hipichu777 编辑。
hipichu777 当前离线   回复时引用此帖
旧 2011-12-23, 09:38 AM   #3
高级会员
 
注册日期: 2008-05-13
年龄: 31
帖子: 230
感谢他人: 0
有 40 帖获得 47 感谢
声望力: 9
yhcode 正向着好的方向发展
默认 回复: 新人提问:如何实现求一个矩阵中N个最大值及下标的函数

for k=1:300
[row(k).vlu col(k).vlu] = find(input(:,1) == max(input,[],1));
end
__________________
工科'985'博士,(图像处理、分析及理解;模式识别;运动估计;数据分析等)定做程序、算法实现--qq:752105755
yhcode 当前离线   回复时引用此帖
回复

书签

主题工具
显示模式

发帖规则
不可以发表新主题
可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛启用 表情符号
论坛启用 [IMG] 代码
论坛禁用 HTML 代码
Trackbacks are 禁用
Pingbacks are 禁用
Refbacks are 启用



所有时间均为北京时间。现在的时间是 01:11 AM


Powered by vBulletin
版权所有 ©2000 - 2012,Jelsoft Enterprises Ltd.
陕ICP备07001583号
感谢MEyu科技提供优质空间

SEO by vBSEO ©2009, Crawlability, Inc.