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

看板MATLAB作者 (Q仔)時間6年前 (2018/06/03 13:22), 編輯推噓1(106)
留言7則, 2人參與, 6年前最新討論串1/2 (看更多)
令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), 來自: 117.19.5.131 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1528003370.A.D44.html

06/03 14:16, 6年前 , 1F
[x,y] = ind2sub([3,3], find(magic(3)>5))
06/03 14:16, 1F

06/03 14:27, 6年前 , 2F
謝謝樓上,不過這個結果似乎也是跟find結果一樣
06/03 14:27, 2F

06/03 14:28, 6年前 , 3F
ind2sub好像多此一舉?
06/03 14:28, 3F

06/03 14:30, 6年前 , 4F
另外ind2sub(siz,ind)的siz是要跟原矩陣一樣嗎?
06/03 14:30, 4F

06/03 15:17, 6年前 , 5F
ind2sub 就是轉換而已,所以siz就是原矩陣大小
06/03 15:17, 5F

06/03 15:18, 6年前 , 6F
你的情況就是[3,9]。由於find出來是1維index,所以要轉換
06/03 15:18, 6F

06/03 15:21, 6年前 , 7F
更正:查了手冊,find 可以直接輸出sub XD, ind2sub 免了
06/03 15:21, 7F
文章代碼(AID): #1R4tigr4 (MATLAB)
文章代碼(AID): #1R4tigr4 (MATLAB)