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