Re: [问题]矩阵每几行取一最大值,并输出其列之位置

楼主: moussorgsky (法国号有气质)   2014-11-22 08:17:35
※ 引述《PPPAAT ()》之铭言:
: 请问各位大大~
: 若我有一矩阵A
: A= 1 4 5 3
: 6 8 9 4
: 2 3 7 6
: 5 1 4 2
: 例如:想每两行取一最大值,并输出其列之位置
: 输出结果为 [8,9]以及[2,2]
: 我试过
: [C,I] = max(A) 似乎只能针对每一行取最大值并输出其相对之列位置
: 也试过将A转置后
: B=A'
: [C,I] = max(B,[],2)
: 得到的结果跟上面如出一辙
: 请问是我哪里没注意到吗~~
: 请各位大大赐教,感恩!!
程式码如下:
A= magic(100);
num = 3;
left = mod( size(A',1) , num );
counter1 = size(A',1) - left;
counter2 = counter1/num;
for i=1 : num : counter1
[val,ind] = max(A( : , i:i+num-1 ));
[mx,col] = max(val);
row = ind(col);
fprintf('第%d',i)
fprintf('行到第%d',i+num-1)
fprintf('行中的最大值为%d\n',mx)
fprintf('位置在第%d',col+i-1)
fprintf('行第%d',row)
fprintf('列\n\n')
end
i=counter1+1;
[val,ind] = max(A( : , i:size(A',1) ));
[mx,col] = max(val);
row = ind(col);
fprintf('第%d',i)
fprintf('行到第%d',size(A',1))
fprintf('行中的最大值为%d\n',mx)
fprintf('位置在第%d',col+i-1)
fprintf('行第%d',row)
fprintf('列\n\n')
(中文是很神奇的......在数学的世界里,行是直的,也就是上下的
而列是横的,也就是左右的)
但当我们写横的文章时(譬如你现在正在看的这篇),我们只会说第几行的第几个字到
第几个字,而不会说第几列的第几个字到第几个字......
当我们读国语课本又不一样了......那时候所说的行又变成直的了,而且是从右边读
到左边......
不知道日本人和韩国人有没有这困扰......
回到程式码^^"
第一行的矩阵A当然是要自己输入或读取的,上面我是为了测试才用magic的
第二行的num就是你想每隔(数学上的)几行(直的)去找出最大值,上面我输入3
除此之外,其他应该不必再特地改程式码了
输入和输出的格式就请自己加囉
不过这写法有一个小问题,就是如果在一个范围里,有好几个元素都是最大值,程式
所印出来的index会是最左边那行的index。
譬如第1行第5列,第二行第7列,第三行第2列都有相同的数值,且其值是第1行到第3
行中的最大值,那此程式是印出第1行第5列,不会三个位置都印出来。
可以试试看自己把这个小问题解决(因为我不知道你会不会需要这样的资讯)
作者: PPPAAT   2014-11-22 11:30:00
非常非常感谢您的解答!!超详细XDD 对我帮助很大~
作者: siro0207 (希罗)   2014-11-25 01:48:00
以前的老师直接教 一"列"火车 所以列是左右的不过大陆跟台湾相反

Links booklink

Contact Us: admin [ a t ] ucptt.com