Re: [討論] 如何輸出矩陣中符合條件的座標?

看板MATLAB作者 (sppmg)時間6年前 (2018/06/03 15:35), 6年前編輯推噓1(105)
留言6則, 3人參與, 6年前最新討論串2/2 (看更多)
如果你要用迴圈處理的話(matlab 還是建議用「向量化」、內建指令等方式比較快) f=[0 0 0 0 0 1 0 0 0;0 0 0 1 0 0 0 0 1;0 1 0 0 0 0 1 0 0] ; count = 1 ; % 結果記數 ans_ind = zeros(numel(f), 2); % 預配置空間 % 或是我個人比較喜歡下面這種,據說比較快 % ans_ind(numel(f), 2) = 0 ; for i=1:size(f,1) for j=1:size(f,2) if f(i,j)==1 ans_ind(count, :) = [i, j] ; count = count +1 ; end end end % 消去多餘空間 if count > 1 ans_ind = ans_ind(count-1, :) ; end ※ 引述《qwerty754892 (Q仔)》之銘言: : 令f矩陣為下 : 0 0 0 0 0 1 0 0 0 : 0 0 0 1 0 0 0 0 1 : 0 1 0 0 0 0 1 0 0 : 將f矩陣中,值為1的座標(x,y)標出 : 例如:(1,6)、(2,4)、(2,9)... : clear all : close all : clc : f=[0 0 0 0 0 1 0 0 0;0 0 0 1 0 0 0 0 1;0 1 0 0 0 0 1 0 0] : for i=1:size(f,1) : for j=1:size(f,2) : if f(i,j)==1 : X(i)=i : Y(j)=j : end : end : end : 我想得到的結果應該是 : x=[1 2 2 ...] : y=[6 4 9 ...] : 但我得到的數值為 : x=[1 2 3] : y=[0 2 0 4 0 6 7 0 9] : 大概知道原因,是i=1的時候 : 圖像就已經抓到f值是1了 : 所以x軸的部分就給1 : 但是y軸的部分根本還沒帶入,就已經符合條件 : 所以得到的y會有0出現 : 那我改寫成這樣 : clear all : close all : clc : f=[0 0 0 0 0 1 0 0 0;0 0 0 1 0 0 0 0 1;0 1 0 0 0 0 1 0 0] : %設一個 P矩陣儲存(1,1)、(1,2)、(1,3)....去帶入 : for i=1:size(f,1) : for j=1:size(f,2) : P=[i j] : if f(P(1),P(2))==1 : X(i)=P(1) : Y(j)=P(2) : end : end : end : 但結果還是跟原本一樣,沒有辦法正確輸出 : 後來找到一個指令是[x y]=find(f==1) : 得到結果如下 : x = : 3 : 2 : 1 : 3 : 2 : y = : 2 : 4 : 6 : 7 : 9 : 也就是得到(3,2) (2,4) (1,6).... 這樣 : 能夠正確輸出座標了,但還是不服氣 : 想知道我的寫法到底哪裡不行,要怎麼改 : 請各位ML大神指導一下,謝謝。 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 115.82.147.156 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1528011323.A.719.html ※ 編輯: sppmg (115.82.147.156), 06/03/2018 15:38:13 ※ 編輯: sppmg (115.82.147.156), 06/03/2018 15:40:19

06/03 17:44, 6年前 , 1F
對不起 好像不行 https://i.imgur.com/NF4dDXa.jpg
06/03 17:44, 1F

06/03 17:45, 6年前 , 2F
結果好像不是座標?我沒上過正課 覺得好弱……
06/03 17:45, 2F

06/03 18:22, 6年前 , 3F
可以把 %消去多餘空間以下的指令註解掉,應該就可以記
06/03 18:22, 3F

06/03 18:22, 6年前 , 4F
錄全部數值為1的位置。另外我想問一下你的X,Y座標是分
06/03 18:22, 4F

06/03 18:22, 6年前 , 5F
別為那兩個方向?可能方向會有點不太一樣
06/03 18:22, 5F

06/03 18:34, 6年前 , 6F
抱歉漏了「1:」 ans_ind(1:count-1, :) ;
06/03 18:34, 6F
文章代碼(AID): #1R4vexSP (MATLAB)
文章代碼(AID): #1R4vexSP (MATLAB)