看板 MATLAB 關於我們 聯絡資訊
感謝多位前輩的幫助 小弟最後的 code 附在最後 丟進 data 後是給第一段和最後一段 1 的時間 並有處理 part 2 和 3 的問題 反而其實 part 1 不需要真的作了 因為有了 bwlabel 這個 function 的關係 -- function [ roi_time_first , roi_time_last] = groitime(roi_data) roi = roi_data + 0; temp = 0; while temp == 0 [~ , num_of_roi] = bwlabel(roi); for n = 1:num_of_roi if n < num_of_roi [~, roi_time_t1] = find(bwlabel(roi)==n); [~, roi_time_t2] = find(bwlabel(roi)==n+1); time_diff = roi_time_t2(1) - roi_time_t1(end); if time_diff <= 200 roi(roi_time_t1(end)+1 : roi_time_t2(1)-1) = 1; break end else temp = 1; end end end for n = 1:num_of_roi [~, roi_time] = find(bwlabel(roi)==n); if length(roi_time) <= 100 roi(roi_time) = 0; end end [~, roi_time_first] = find(bwlabel(roi)==1); [~, roi_time_last] = find(bwlabel(roi)==num_of_roi); end -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 24.208.230.65 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1441503241.A.D15.html
celestialgod: 上一篇爭那麼久 就在說向量化比較快.... 09/06 10:00
celestialgod: 最後你還是回到迴圈了(攤手 09/06 10:01
YoursEver: 還是太複雜,把原始資料扔進diff,再find;靠1,-1的位置來 09/06 10:49
YoursEver: 判定是不是發生 <200 的case; 1,-1必然成對出現,判斷上 09/06 10:50
YoursEver: 會非常容易. 09/06 10:50
JamesChen: 我這個迴圈是根據很 sub 的資料在做了 09/06 11:23
JamesChen: 不是比較快了嗎 0.0 還是我有誤解 抱歉 09/06 11:24
JamesChen: Y 大那個方法我有朋友建議了 09/06 11:24
JamesChen: 對 part 1 是很快 但沒有 bwlabel 方便 09/06 11:25
JamesChen: part 2 / part 3 我還是只想的到迴圈檢查子集合的方式 09/06 11:26
JamesChen: 小弟比較笨... 抱歉 09/06 11:26
celestialgod: 都寫給你看了,還能怎樣(攤手 09/06 11:56
JamesChen: 我還沒完全看懂C大的文 因為 Y大給的函數已經算完全讓 09/07 00:31
JamesChen: 我想到怎麼解決問題,速度也夠快了。研究死線在即,就 09/07 00:31
JamesChen: 先應付了,過兩天一定會研究C大向量化的方法,感謝你。 09/07 00:31