Re: [討論] 如何輸出矩陣中符合條件的座標?
如果你要用迴圈處理的話(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
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
06/03 18:22, 4F
→
06/03 18:22,
6年前
, 5F
06/03 18:22, 5F
→
06/03 18:34,
6年前
, 6F
06/03 18:34, 6F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章