爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 6658|回复: 4

[程序设计] 求助,求一数组中每一行最大值所在的列数

[复制链接]

新浪微博达人勋

发表于 2014-7-28 23:41:20 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
我有一个1048*111的数组,现在需要计算得到每一行最大值所在的列数,即列下标。
我用了一个循环来得到每一行的最大值,并返回其行列数,然后把列数存入一个新的数组中:
  1. for i=1:1048
  2. [x,y]=find(z==max(z(i,:)));
  3. b(i)=y;
  4. end
  5. <p> </p>
复制代码

但是最后总出现这个错误:“???  In an assignment  A(I) = B, the number of elements in B and
I must be the same.”,检查数组的大小肯定是没有问题的,发现一个可能的原因是当某一行的最大值也是其他行的最大值时,会同时返回多个y值到数组b中,最后导致b数组溢出,可是不知道怎么解决这个问题,请教各位怎么解决或者有什么其他的办法?
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2014-7-29 06:28:03 | 显示全部楼层
本帖最后由 sarcr 于 2014-7-29 06:29 编辑

例如下例:
a数组:3  3  3
           4  5  6
           7  7  6
方法1:
如果有很多个最大值,仅仅只是想找到其中一个的位置就好了的话,可以使用这个命令:
[rowmaxvalue,rowmaxnum]=max(a');%每行的最大值及列号
所得结果:
rowmaxvalue =3     6     7
rowmaxnum  =1     3     1
就是说每行的最大值分别是3,6,7,每行第一个出现最大值的位置是第1列、第三列、第一列。
注意语句中需要将矩阵转置。

方法二:采用元胞数组
语句如下:
for i=1:3
clear x y;
[x,y]=find(a(i,:)==max(a(i,:)));
b{i,:}=y(:);
end
关键代码是第四行,将()改为了{} ,这样运用了matlab的特色“元胞数组”的概念。
元胞数组可以将列数不同的矩阵看成是一个元素存储。
例如上例,元胞数组b的运行结果是:b={[1;2;3],3,[1,2]}
意思就是第一个元素[1;2;3]分别是第一行最大值的所在列数,第二个元素3是第二行最大值的所在列数,以此类推。
之后程序如何调用b中每一行的最大值?
运用此函数:cell2mat(b(1))
将元胞数组转换成矩阵格式。例如:cell2mat(b(1))的运行结果就是矩阵[1;2;3]。

matlab尽管已经比较灵活了,但是为了运算的不歧义,对于矩阵的要求还是比较高,例如列数不同的矩阵的合并是不允许的,需要将两个矩阵的列数弄相等,才能连接。

评分

参与人数 1金钱 +10 收起 理由
ibeing + 10 再来感谢一下!

查看全部评分

密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

 成长值: 32430
发表于 2014-7-29 14:59:42 | 显示全部楼层
二楼正解,再补充一句,使用matlab函数的时候一定要注意函数返回值的定义!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-1 13:30:44 | 显示全部楼层
sarcr 发表于 2014-7-29 06:28
例如下例:
a数组:3  3  3
           4  5  6

非常感谢热心详细的解答!
密码修改失败请联系微信:mofangbao

新浪微博达人勋

 楼主| 发表于 2014-8-1 13:37:11 | 显示全部楼层
二爷名声在外 发表于 2014-7-29 14:59
二楼正解,再补充一句,使用matlab函数的时候一定要注意函数返回值的定义!

好的,感谢提醒
密码修改失败请联系微信:mofangbao
您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

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