Re: [討論] 簡單的計算 想不到暴力解之外的方法

看板MATLAB作者 ( )時間8年前 (2015/09/06 09:34), 編輯推噓0(0015)
留言15則, 3人參與, 最新討論串3/3 (看更多)
感謝多位前輩的幫助 小弟最後的 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

09/06 10:00, , 1F
上一篇爭那麼久 就在說向量化比較快....
09/06 10:00, 1F

09/06 10:01, , 2F
最後你還是回到迴圈了(攤手
09/06 10:01, 2F

09/06 10:49, , 3F
還是太複雜,把原始資料扔進diff,再find;靠1,-1的位置來
09/06 10:49, 3F

09/06 10:50, , 4F
判定是不是發生 <200 的case; 1,-1必然成對出現,判斷上
09/06 10:50, 4F

09/06 10:50, , 5F
會非常容易.
09/06 10:50, 5F

09/06 11:23, , 6F
我這個迴圈是根據很 sub 的資料在做了
09/06 11:23, 6F

09/06 11:24, , 7F
不是比較快了嗎 0.0 還是我有誤解 抱歉
09/06 11:24, 7F

09/06 11:24, , 8F
Y 大那個方法我有朋友建議了
09/06 11:24, 8F

09/06 11:25, , 9F
對 part 1 是很快 但沒有 bwlabel 方便
09/06 11:25, 9F

09/06 11:26, , 10F
part 2 / part 3 我還是只想的到迴圈檢查子集合的方式
09/06 11:26, 10F

09/06 11:26, , 11F
小弟比較笨... 抱歉
09/06 11:26, 11F

09/06 11:56, , 12F
都寫給你看了,還能怎樣(攤手
09/06 11:56, 12F

09/07 00:31, , 13F
我還沒完全看懂C大的文 因為 Y大給的函數已經算完全讓
09/07 00:31, 13F

09/07 00:31, , 14F
我想到怎麼解決問題,速度也夠快了。研究死線在即,就
09/07 00:31, 14F

09/07 00:31, , 15F
先應付了,過兩天一定會研究C大向量化的方法,感謝你。
09/07 00:31, 15F
文章代碼(AID): #1LwvW9qL (MATLAB)
文章代碼(AID): #1LwvW9qL (MATLAB)