Overlapping time-intervals
显示 更早的评论
I have two date-time arrays a and b.
a for start time and b for end time (above horizontal line on the picture).
What is the way to parse them and get what is beneath horizontal line on the picture?

采纳的回答
更多回答(1 个)
Hung Doan
2019-7-19
1 个投票
nrow is undefined in the initial plotting but other than that, works like a charm!
2 个评论
Rostislav Teryaev
2019-7-23
Ted Shultz
2020-8-21
编辑:Ted Shultz
2020-8-24
Small typo in original answer, code could be be:
intervalsIn = [8 10; 2 4; 4 5; 5 7; 9 11; 15 16; 14 17; 10 12]
% -----plot it first
nline = repmat((1:size(intervalsIn,1))',1,2);
nrow = size(intervalsIn,1);
plot(intervalsIn',nline','o-')
ylim([-.5*nrow 1.5*nrow])
% ----- find union of intervals
intervalsIn = sort(intervalsIn,2); % make the pairs always increasing pairs
[intervalsIn, ind] = sort(intervalsIn(:)); % sorts all the input values, and keepts track of how they moved around
c = [ones(1,nrow) -ones(1,nrow)]'; % this is a matrix that keeps track of when intervals start (1) and stop (-1)
c = c(ind); % put in order of occurrence
csc = cumsum(c); %sum up starts (1) and stops (-1) , will be =0 at upper end of new interval(s)
irit = find(csc==0); % find index locations of 0 (ends of intervals)
ilef = [1; irit+1]; % start of intervals index is at the very start (1) and one after all the other ends
ilef(end) = []; % no new interval starting at the very end
% spansOut matrix is start and end points of the new intervals, y1,y2
spansOut = [intervalsIn(ilef) intervalsIn(irit)]
类别
在 帮助中心 和 File Exchange 中查找有关 Creating and Concatenating Matrices 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!