- 积分
- 5258
- 贡献
-
- 精华
- 在线时间
- 小时
- 注册时间
- 2012-9-13
- 最后登录
- 1970-1-1
|
发表于 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尽管已经比较灵活了,但是为了运算的不歧义,对于矩阵的要求还是比较高,例如列数不同的矩阵的合并是不允许的,需要将两个矩阵的列数弄相等,才能连接。
|
评分
-
查看全部评分
|