根据其他向量中的值识别向量中的元素



我有 8 个事件的时间开始,称为事件 1事件 2事件 3、...事件 8(这些事件都不能同时发生,因此每个事件都是唯一的(。每个事件都是 nx 1 双精度(n可以因事件而异(,如下所示:

event1 = [29.7; 38.4; 65.6; 149.6; 369.3]  
event2 = [10.1; 11.8; 38.1; 142.2]
event3 = [5.5; 187.1; 200.1; 202.8; 236.7]  
event4 = [15.3; 29.2; 54.5; 87.6; 100.4; 105.8; 120.9; 122.4]  
...  
event8 = [38.2; 66.7; 89.7; 100.5; 105.2; 168.9]

我想在事件 1 中查找紧靠事件2中的时间点或事件 4 中的时间点的时间点,这意味着两者之间不能有来自不同事件的另一个时间点。例如,事件 1 中的第一个时间点(即 29.7(符合此标准,因为它前面是事件 4中的第二个时间点(即 29.2(。同样,事件1的时间点 4 之前是事件 2中的时间点 4。相比之下,事件1中的第二个时间点(即 38.4(不符合条件,因为它前面是事件 8中的第一个时间点(即 38.2(。

结果应该是 event1 的索引,如下所示:index = [1;4]

谁能帮我解决这个问题?

MATLAB 的内置函数可能会提供更干净的解决方案,但我认为以下函数非常简单。

event1 = [29.7; 38.4; 65.6; 149.6; 369.3];  
event2 = [10.1; 11.8; 38.1; 142.2];
event3 = [5.5; 187.1; 200.1; 202.8; 236.7];  
event4 = [15.3; 29.2; 54.5; 87.6; 100.4; 105.8; 120.9; 122.4];  
event8 = [38.2; 66.7; 89.7; 100.5; 105.2; 168.9];

event_agg = [event1; event2; event3; event4; event8]; % events vector, aggregate 
eve_numb = [ones(length(event1),1); % event number vector
2*ones(length(event2),1);
3*ones(length(event3),1);
4*ones(length(event4),1);
8*ones(length(event8),1)];
EVENTS_IND = [event_agg, eve_numb]; % aggregate events with indices
EVENTS_SORT = sortrows(EVENTS_IND); % agg. events w/indices, sorted by event times
hits_array = []; % store the event times that meet the specified condition
for iter = 2:length(EVENTS_SORT)
if EVENTS_SORT(iter,2) == 1 % if the event time at iter comes from event #1
if EVENTS_SORT(iter-1,2) == 2 || EVENTS_SORT(iter-1,2) == 4 % if the event time at iter-1 come from events #2 or #4
hits_array = [hits_array EVENTS_SORT(iter,1)];
end
end
end

最新更新