声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 5344|回复: 12

[编程技巧] 找原数据中最大值的位置?

[复制链接]
发表于 2011-3-10 16:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
有矩阵y=[1 2 3 6 7 83 4; 3 4 6 7 82 12 3;7 9 5 2 4 6 2;2 3 4 6 7 89 0;1 3 4 6 8 9 4;1 2 3 4 5 6 6 ],我的意思是:如果求出每一列的最大值,但是最大值不能再第一行,如果某列的最大值在第一行的话,那么要舍弃而从第二行开始取剩余行的最大值,如果不在第一行,那么便要这个最大值,并且还要求出这样计算下来的最大值在矩阵中的位置。请问该怎么办?或者用哪个函数呢?
回复
分享到:

使用道具 举报

发表于 2011-3-10 16:34 | 显示全部楼层
  1. [C,I]=max(y(2:end,:))
  2. I=I+1
复制代码
C是你要求的各列的最大值;
I是各列最大值对应的行数;
是不是这个意思

评分

1

查看全部评分

发表于 2011-3-10 18:20 | 显示全部楼层
回复 2 # 雪缘 的帖子

我怎么看着好像这个“不在第一行”要一直递归下去……就是说,列索引范围(2:end)的最大值如果是第2行的话……还要继续算列索引范围(3:end)的最大列范围,直到(i:end)的最大列不是第i列为止……
请楼主解释真相……
 楼主| 发表于 2011-3-10 19:45 | 显示全部楼层
回复 2 # 雪缘 的帖子

不好意思我之前表达的不明白:就是我想要每一列中的最大值,但是但是要求第一列中最大值不能出现在第一行,第二列中的最大值不能出现在第一行和第二行,只能从第三行一下找,如果出现在第二行或者出现在第一行,那么忽略,而从第二列的剩下的几行中来确定一个新的最大值,以此类推,第三行的最大值不能出现在第三行以上的行数上,。。。。
我的意思是想这样:
y= [1 2 3 6 7 83 4; 3 4 6 7 82 12 3;7 9 5 2 4 6 2;2 3 4 6 7 81 0;1 3 4 6 8 9 4;1 2 3 4 5 6 6;1 8 9 6 54 7 1;4 5 6 78 55 2 22   ]
[C,I]=max(y),用这个命令求出来的最大值有的在第一行山上,那么我想用if语句,所以我就想写成这样的:
for i=1:7
d=1
if i<2+(i-1)
M(i)=max((2+(i-1)):end,i)
else
M(i)=C(i)
end
end
不知道我表达清楚了没有,还有就是这样确定好最大值序列M以后,我怎样才能达到M中的数值在y中的位置呢?
 楼主| 发表于 2011-3-10 19:46 | 显示全部楼层
回复 3 # Rainyboy 的帖子

不好意思,是我表达不对!恩我已经把思路重新写在上面,还请多帮忙!谢谢
发表于 2011-3-11 00:04 | 显示全部楼层
本帖最后由 ChaChing 于 2011-3-11 00:04 编辑

若LZ可以确定矩阵都是正数, 简单使用tril即可
y= [1 2 3 6 7 83 4; 3 4 6 7 82 12 3;7 9 5 2 4 6 2;2 3 4 6 7 81 0;1 3 4 6 8 9 4;1 2 3 4 5 6 6;1 8 9 6 54 7 1;4 5 6 78 55 2 22];
[C,I]=max(tril(y,-1)); I

若矩阵可能为负数, 使用
y= [1 2 3 6 7 83 4; 3 4 6 7 82 12 3;7 9 5 2 4 6 2;2 3 4 6 7 81 0;1 3 4 6 8 9 4;1 2 3 4 5 6 6;1 8 9 6 54 7 1;4 5 6 78 55 2 22];
y(find(triu(y)))=min(y(:)); [C,I]=max(y); I

发表于 2011-3-27 15:53 | 显示全部楼层
回复 4 # cboboc 的帖子

解决了吗?
 楼主| 发表于 2011-3-27 17:14 | 显示全部楼层
本帖最后由 cboboc 于 2011-3-27 17:15 编辑

回复 7 # ChaChing 的帖子

还没有解决,我的意思可能大家没理解,我就是实验采集了一些数据,我想找出每一个测点的数据中的最大值,但是对于这个最大值,我不想要开始几秒钟内的,所以就想将测点采集到的数据从一定的时间或者点数开始,然后找最大值。我把数据附上

data.txt

85.88 KB, 下载次数: 1

发表于 2011-3-27 19:39 | 显示全部楼层
水平有限,还在理解楼主的意思,呵呵
发表于 2011-3-28 00:04 | 显示全部楼层
回复 8 # cboboc 的帖子

不了解楼主的意思!
发表于 2011-4-2 14:49 | 显示全部楼层
直接把前面采集的数据取消掉呢?
发表于 2011-4-7 13:00 | 显示全部楼层
回复 1 # cboboc 的帖子

试试find,
m=max(max(y));
[a,b]=find(y==m);
[a,b]就是y最大值点的坐标
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-29 09:34 , Processed in 0.074844 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表