作者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://webptt.com/cn.aspx?n=bbs/MATLAB/M.1441503241.A.D15.html
1F:→ celestialgod: 上一篇争那麽久 就在说向量化比较快.... 09/06 10:00
2F:→ celestialgod: 最後你还是回到回圈了(摊手 09/06 10:01
3F:→ YoursEver: 还是太复杂,把原始资料扔进diff,再find;靠1,-1的位置来 09/06 10:49
4F:→ YoursEver: 判定是不是发生 <200 的case; 1,-1必然成对出现,判断上 09/06 10:50
5F:→ YoursEver: 会非常容易. 09/06 10:50
6F:→ JamesChen: 我这个回圈是根据很 sub 的资料在做了 09/06 11:23
7F:→ JamesChen: 不是比较快了吗 0.0 还是我有误解 抱歉 09/06 11:24
8F:→ JamesChen: Y 大那个方法我有朋友建议了 09/06 11:24
9F:→ JamesChen: 对 part 1 是很快 但没有 bwlabel 方便 09/06 11:25
10F:→ JamesChen: part 2 / part 3 我还是只想的到回圈检查子集合的方式 09/06 11:26
11F:→ JamesChen: 小弟比较笨... 抱歉 09/06 11:26
12F:→ celestialgod: 都写给你看了,还能怎样(摊手 09/06 11:56
13F:→ JamesChen: 我还没完全看懂C大的文 因为 Y大给的函数已经算完全让 09/07 00:31
14F:→ JamesChen: 我想到怎麽解决问题,速度也够快了。研究死线在即,就 09/07 00:31
15F:→ JamesChen: 先应付了,过两天一定会研究C大向量化的方法,感谢你。 09/07 00:31