作者JamesChen ( )
看板MATLAB
標題Re: [討論] 簡單的計算 想不到暴力解之外的方法
時間Sun Sep 6 09:33:57 2015
感謝多位前輩的幫助
小弟最後的 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