Re: [問題]矩陣每幾行取一最大值,並輸出其列之位置

看板MATLAB作者 (法國號有氣質)時間10年前 (2014/11/22 08:17), 編輯推噓2(201)
留言3則, 2人參與, 最新討論串2/3 (看更多)
※ 引述《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列,不會三個位置都印出來。 可以試試看自己把這個小問題解決(因為我不知道你會不會需要這樣的資訊) -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.164.224 ※ 文章網址: http://www.ptt.cc/bbs/MATLAB/M.1416615460.A.B16.html

11/22 11:30, , 1F
非常非常感謝您的解答!!超詳細XDD 對我幫助很大~
11/22 11:30, 1F

11/25 01:48, , 2F
以前的老師直接教 一"列"火車 所以列是左右的
11/25 01:48, 2F

11/25 01:48, , 3F
不過大陸跟台灣相反
11/25 01:48, 3F
文章代碼(AID): #1KRzOaiM (MATLAB)
文章代碼(AID): #1KRzOaiM (MATLAB)